问题描述
我对批处理的局限性感到有些束缚,并不确定编写某些逻辑的最佳方法。我有一个混合的Batch / VBScript用于打印,并确定确认VBScript完成的最佳方法是利用外部文件作为占位符。
逻辑是这样的:
批处理脚本->创建tmpfile->运行VBScript
VBScript->打印作业->删除文件
该部分有效,但是在我的“调用脚本”中,我有一个文件数组,可以使用FOR LOOP
进行迭代并打印,但是我不知道如何对逻辑{{1 }}。我已经弄清楚了如何“循环”直到文件不存在,但这使用了WHILE FILE EXISTS DON'T RUN NEXT PRINT JOB
语句,并且它们在GoTo
中不起作用。我尝试使用“ EXIT / B”,我以为只是退出一个函数,但它只是一起关闭了主脚本。
这是我的“通话脚本”,需要帮助〜
FOR LOOPS
解决方法
问题是使用GoTo
w / EXIT /B
。 GoTo
仅跳至LINELABEL
,而EXIT /B
退出PROCESS
IE:脚本。 CALL
打开SUBPROCESS
,EXIT /B
返回到主PROCESS
,允许进一步执行代码。 (与调用外部脚本并关闭它相同)。
这是我最终用来测试的东西,只是在每次数组迭代之后手动删除了文件。
@ECHO OFF
setlocal enabledelayedexpansion
::This is a placeholder file to check if VBScript is running
SET File="%TEMP%\jobrunning"
del /F /Q %File%
::Set arrsize -1
set arrsize=4
set arrayline[0]=1A
set arrayline[1]=2A
set arrayline[2]=3A
set arrayline[3]=4A
set arrayline[4]=5A
::read it using a FOR /L statement
for /l %%n in (0,1,%arrsize%) do (
copy /y NUL %TEMP%\jobrunning.txt >NUL
TIMEOUT 2
CALL :file_exists
echo !arrayline[%%n]!
)
PAUSE
GoTo :EOF
:Is Job Still Running?
:file_exists
IF EXIST %File% (
GoTo :file_exists
) ELSE (
EXIT /B
)