检查文件而不是 运行 命令直到文件不存在批处理
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 /B
。 GoTo
只是跳转到 LINELABEL
,EXIT /B
退出 PROCESS
IE:脚本。 CALL
打开一个 SUBPROCESS
和 EXIT /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
)
我觉得批处理的局限性有点受限,不确定编写某些逻辑代码的最佳方式。我有一个用于打印的混合 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 /B
。 GoTo
只是跳转到 LINELABEL
,EXIT /B
退出 PROCESS
IE:脚本。 CALL
打开一个 SUBPROCESS
和 EXIT /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
)