检查文件而不是 运行 命令直到文件不存在批处理

Checking for File and not Running command till file doesn't exist in batch

我觉得批处理的局限性有点受限,不确定编写某些逻辑代码的最佳方式。我有一个用于打印的混合 Batch/VBScript,并决定确认 VBScript 已完成的最佳方法是使用外部文件作为占位符。

逻辑是这样的:

批处理脚本 --> 创建 tmpfile --> 运行 VBScript

VBScript --> 打印作业 --> 删除文件

那部分有效,但在我的“调用脚本”中,我有一个文件数组,我使用 FOR LOOP 进行迭代和打印,但我不知道如何编写逻辑代码 WHILE FILE EXISTS DON'T RUN NEXT PRINT JOB。我已经弄清楚如何“循环”直到文件不存在,但这使用 GoTo 语句并且它们在 FOR LOOPS 中不起作用。我尝试使用“EXIT /B”,我认为它只是退出一个函数,但它只是一起关闭了主脚本。

这是我的“调用脚本”,需要一些帮助~

::This is a placeholder file to check if VBScript is running
SET File="%TEMP%\jobrunning.txt"
del /F /Q %File%

::Print Each File in Array
for /l %%n in (0,1,%arrsize%) do (
SET FILEPATH="FILEPATH=!file[%%n]!
GoTo file_exists
)

::Is Job Still Running?
:file_exists
   IF EXIST %File% (
       GoTo :file_exists
) ELSE (
ECHO %PFUNC% %FILEPATH%
%PFUNC% %FILEPATH%
EXIT /B
)

问题是使用 GoTo w/ EXIT /BGoTo 只是跳转到 LINELABELEXIT /B 退出 PROCESS IE:脚本。 CALL 打开一个 SUBPROCESSEXIT /B returns 到 main 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
)