我有一个Windows批处理文件启动其他批处理文件。在第一批执行任何操作之前,如何等待所有其他批处理文件完成?我不能使用/等待,因为我需要其他命令并行运行。等待命令完成
等待命令完成
回答
我的建议是使用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男,在这里是两个批次的改进版本:
批次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
请注意区别:我们得到的第二回声,证明完毕
也就是说,如果没有CALL,它就和CALL一样好,但只能......终止。 :) –
@Andriy M:根据我迄今为止所经历的情况,这是**不是**所以,如果没有调用 - 执行立即返回到下一行,而不等待调用的批处理/命令完成(也许你应该用长时间的操作来尝试)。 – woohoo
这太奇怪了,我不得不使用您的示例脚本验证我的期望。我在Windows 7 SP1的命令提示符下运行了第一批,这两个脚本正如我所想的那样为我工作,即当第二次调用'batch2.bat'时终止执行。也就是说,'batch1.bat'的最后一行没有执行。你有什么测试他们,你说没有CALL的执行返回到第一批,并没有等待呢? –
您可以使用多个标志文件,每个运行的批处理文件一个。例如:
第一个批处理文件创建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
@woohoo:不好意思,我想这里有一个问题。问题在于如何在继续父项之前等待所有的孩子平行批次结束。没有办法通过CALL解决这个问题,但是通过START。 正如提问者所说,他不能使用/ WAIT,这是START命令的一个选项。解决方案是实现一个信号量系统,允许父级批处理文件知道其所有子级别何时结束。我提出了一个基于文件存在的非常简单的信号量系统,然而,它应该是完美的。 那么,为什么我的回答收到downvote? :-( – Aacini
+1,为什么选择倒票,尤其是因为这是实际解决问题的唯一答案,最好是让主文件创建flagfile,主脚本可能在子进程完成初始化之前开始测试。 – dbenham
LOVE this!在VS中,我们在每个服务项目的构建后事件中都使用了'CALL'来下载每个* .cs引用文件,以存储在另一个包含所有简单程序集引用的项目中, START/b/i',发现我可以在同一个窗口同时运行它们,而不会互相影响,所以很甜蜜,然后我就像是在完成构建之后我可以使用'MSBuild'服务项目,以便引用它的程序集的项目自动更新。BOOM! –
- 1. 等待命令完成
- 2. Python popen命令。等待命令完成
- 3. 等待shell命令来完成
- 4. 等待终端命令完成python
- 5. 从Java执行命令,等待命令完成
- 6. 等待完成
- 7. 等待完成
- 8. 等待BackgroundWorker完成?
- 9. 等待$ .post完成
- 10. 等待NSURLSessionTask完成
- 11. jquery,等待完成
- 12. 等待webrequest完成
- 13. delayed_job等待完成
- 14. QNetworkReply等待完成
- 15. 等待AsyncTask完成
- 16. 等待webworker完成
- 17. 等待SwingWorker完成
- 18. 如何通过命令行执行命令并等待它完成
- 19. 运行命令并等待在c#中完成#
- 20. 斯卡拉电梯 - 运行系统命令,并等待完成
- 21. 等待,直到最后一个调试器命令完成
- 22. Python命令等待shell(ubuntu csh)完成操作/返回码
- 23. 强制MEL脚本等待直到上一个命令完成
- 24. Javascript等待Websocket“发送”命令来完成吗?
- 25. 如何以编程方式等待Shell命令完成运行?
- 26. 执行外部命令并等待它在Linux下完成
- 27. java等待输出命令在ProcessBuilder中完成(“sh”)
- 28. Plink完成远程命令执行后等待按键
- 29. 如何让终端命令等待另一个完成?
- 30. 如何等待一个特定的命令完成硒
你能发布一些代码?我不清楚你的问题是什么。 – steenhulthin
您是否使用'call ...'来启动其他批次? – woohoo