等待命令完成

时间:2011-08-04 18:19:38

标签: windows batch-file command dos

我有一个启动其他批处理文件的Windows批处理文件。在第一批执行somthing之前,如何等待所有其他批处理文件完成?我不能使用/ wait因为我需要其他命令并行运行。

2 个答案:

答案 0 :(得分:8)

您可以使用多个标记文件,每个运行的批处理文件一个。例如:

第一个批处理文件在输入时创建Flagfile.1,并在结束前删除它,与其余的并发批处理文件相同(Flagfile.2,...)

主文件必须等待所有标志文件消失。例如,在主文件中:

start Batch1
start Batch2
.....
:wait
if exist flagfile.* goto wait

在任何批处理文件中,例如Batch1:

echo %time% > flagfile.1
echo Do my process...
del flagfile.1
exit

答案 1 :(得分:1)

我的建议是使用CALL命令。来自Batch Files的示例:

Batch1.bat列表:

REM Batch1.bat
SET ABC=1
CALL BATCH2.BAT %ABC%
ECHO ABC = %ABC%
BATCH2.BAT %ABC%
ECHO ABC = %ABC%

Batch2.bat列表是:

REM Batch2.bat
SET ABC=%ABC%%1

<小时/> 编辑:根据@Andriy M的反馈,这是两个批次的改进版本:

第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%

第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

请参阅batch1中的行,其中我编写了注释使用CALL测试此行而不使用。运行该批次两次,该行包含CALL且没有CALL

控制台的输出没有 CALL

C:\temp>batch1.bat
sleeping 5 seconds...
done sleeping
1. ABC = 11
sleeping 5 seconds...
done sleeping

现在控制台的输出 CALL

C:\temp>batch1.bat
sleeping 5 seconds...
done sleeping
1. ABC = 11
sleeping 5 seconds...
done sleeping
2. ABC = 1111

请注意区别:我们得到第二个回声,q.e.d。