我有一个主批处理文件而不是调用其他 4 个批处理文件,因此我们可以并行运行。
例子:
主要.bat
start call batch1.bat
start call batch2.bat
start call batch3.bat
start call batch4.bat
exit
我希望 Main.bat 在所有 batch1 到 batch 4 停止执行后退出。这样,我就可以获得批处理文件的总运行时间。问题是 Main.bat 甚至在 batch1 到 batch4 完成执行之前就退出了。
我尝试为每个批处理文件计算 %errorlevel%,但它总是返回 0,即使 4 个 .bat 文件仍在运行。
希望有人能帮助我!
谢谢! :)
最佳答案
我认为这是最简单高效的方式:
@echo off
echo %time%
(
start call batch1.bat
start call batch2.bat
start call batch3.bat
start call batch4.bat
) | set /P "="
echo %time%
在这个方法中,主文件中的等待状态是事件驱动的,所以它不消耗任何 CPU 时间!
编辑:添加了一些解释
当 ( block )
中的任何命令输出一行时,set/P
命令将终止,但 start
命令不输出在此 cmd.exe 中不显示任何行。这样,set/P
一直等待输入,直到所有由 start
命令启动的进程结束。此时,与 ( block )
关联的管道关闭,因此 set/P
标准输入关闭,set/P
命令为由操作系统终止。
关于windows - 如何在退出前等待所有批处理文件完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33584587/