您可以使用多个标志文件,每个运行批处理文件一个.例如:
第一个批处理文件在输入时创建Flagfile.1,并在结束前删除它,与其余的并发批处理文件相同(Flagfile.2,...)
主文件必须等待所有flagfiles消失.例如,在主文件中:
start Batch1
start Batch2
.....
:wait
if exist flagfile.* goto wait
Run Code Online (Sandbox Code Playgroud)
在任何批处理文件中,例如Batch1:
echo %time% > flagfile.1
echo Do my process...
del flagfile.1
exit
Run Code Online (Sandbox Code Playgroud)
我的建议是使用CALL命令。批处理文件的示例:
Batch1.bat清单:
REM Batch1.bat
SET ABC=1
CALL BATCH2.BAT %ABC%
ECHO ABC = %ABC%
BATCH2.BAT %ABC%
ECHO ABC = %ABC%
Run Code Online (Sandbox Code Playgroud)
其中 Batch2.bat 列表为:
REM Batch2.bat
SET ABC=%ABC%%1
Run Code Online (Sandbox Code Playgroud)
第 1 批:
@ECHO OFF
REM Batch1.bat
SET ABC=1
CALL batch2.bat %ABC%
ECHO 1. ABC = %ABC%
CALL batch2.bat %ABC% REM test this line with CALL and without
ECHO 2. ABC = %ABC%
Run Code Online (Sandbox Code Playgroud)
第 2 批:
@ECHO OFF
REM Batch2.bat
SET tmout=5
echo sleeping %tmout% seconds...
REM this introduces a timeout by using a nonexistent ip address
PING 1.2.1.2 -n 1 -w %tmout%000 > NUL
echo done sleeping
SET ABC=%ABC%%1
Run Code Online (Sandbox Code Playgroud)
请参阅batch1中的行,其中我使用 CALL 和不使用 编写了注释测试这一行。运行该批处理两次,该行有CALL和没有CALL.
控制台的输出没有 CALL:
C:\temp>batch1.bat
sleeping 5 seconds...
done sleeping
1. ABC = 11
sleeping 5 seconds...
done sleeping
Run Code Online (Sandbox Code Playgroud)
现在控制台的输出为 CALL:
C:\temp>batch1.bat
sleeping 5 seconds...
done sleeping
1. ABC = 11
sleeping 5 seconds...
done sleeping
2. ABC = 1111
Run Code Online (Sandbox Code Playgroud)
请注意区别:我们得到第二个回声,qed