如何从Windows shell生成多个进程并等待它们全部完成?

zr.*_*zr. 13 windows scripting batch-file

我想从Windows批处理脚本执行以下操作:

start proc1.exe

start proc2.exe

...

start procN.exe

<wait for all N processes to complete> <-- What do I put here?
Run Code Online (Sandbox Code Playgroud)

如何等待所有生成的进程完成?

Jer*_*ein 12

这很丑陋,但您可以将每个命令包装在运行该命令的另一个批处理文件中,然后表示该命令已完成.您的主批处理文件将异步调用每个批处理文件并处于循环中等待信号.

例如:

main.bat

start cmd /c proc1.bat
start cmd /c proc2.bat
:wait
sleep 1
IF NOT EXIST proc1done GOTO wait
IF NOT EXIST proc2done GOTO wait
del proc1done
del proc2done
echo All processes are complete
Run Code Online (Sandbox Code Playgroud)

proc1.bat

proc1.exe
echo Done > proc1done
Run Code Online (Sandbox Code Playgroud)

sleep命令在Windows Server 2003 Resource Kit Tools中可用.如果你没有这个,你可以在localhost上使用ping来减慢这个紧密的循环.

  • 我可能更喜欢让主批处理文件创建文件,然后让proc文件删除它们.这样,如果只有一些进程在上一次运行中完成,那么您不会冒任何风险.(您可以通过在运行启动命令之前删除任何现有文件来解决这个问题,但据我所知,如果您更改它,应该稍微减少代码). (4认同)