如何等待多个启动的后台进程完成

时间:2020-04-07 11:15:19

标签: batch-file

我有一个批处理脚本,可通过

在后台启动多个进程(部分是其他批处理文件)
start /b /min command1.exe  some params
start /b /min command2.bat  some params
start /b /min command3.exe  some params

在顶级批处理脚本的结尾,我想等到所有过程完成。

是否有任何方法可以在不执行被调用程序内特殊方法的情况下实现这一目标?

2 个答案:

答案 0 :(得分:0)

您可以创建运行另一个进程的特殊批处理文件,等待其完成并创建一个特殊文件。然后,使用该脚本启动所需的进程,而无需等待并循环,直到创建了所有文件。 灵感示例代码:

Runner.bat:

:: Run, wait and create file; %1 = file name, %2..N - process and params
set FileName=%1
shift
start /b /min /wait %* && (echo OK > %FileName%) || (echo Fail > %FileName%)

Main.bat:

call Runner.bat No1 command1.exe  some params
call Runner.bat No2 command2.bat  some params
...
:Check
... if not exist "No1", "No2", ... (
  timeout /t 5
  goto :Check
)

答案 1 :(得分:0)

一种选择是尝试以WMIC process call create "c:\some.exe","c:\exec_dir"启动它们,并将创建的PID分配给变量,并定期检查PID是否存在。

您也可以尝试使用:

(
    start ""  /b command1
    start "" /b command2
)|findstr "^"
echo all processes in the brackets block have ended

但是如果某些命令是bat文件,则您必须明确使用exit 0,而无需进行/b切换。