windows - 如何在退出前等待所有批处理文件完成?

标签 windows batch-file cmd parallel-processing call

我有一个主批处理文件而不是调用其他 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/

相关文章:

windows - 如何将 .bat 文件中的变量导入到 PowerShell 脚本中?

powershell - cmd到Powershell的连接

windows - 我可以向 Windows 上的应用程序发送 ctrl-C (SIGINT) 吗?

windows - 使用服务启动 .bat

windows - 想要在 Windows 上使用/md 选项编译和构建 boost 库

c# - Windows应用程序中是否有类似SESSION的东西?

SVN 预提交 Hook

powershell - 为什么 "dir"命令没有向我显示某些文件夹?

java - SQL批量更新-回滚 "CREATE TABLE"?

javascript - 使用 CSV 批量上传到 Azure 存储