我想从批处理文件(也是批处理文件)启动两个程序 - 它们将执行几秒钟.然后在主批处理文件中我想等待两个都完成然后继续主执行.这有可能吗?
你可以,有点:
@echo off
set Token=MAIN_%RANDOM%_%CD%
start "%Token%_1" cmd /c child1.cmd
start "%Token%_2" cmd /c child2.cmd
:loop
ping -n 2 localhost >nul 2>nul
tasklist /fi "WINDOWTITLE eq %Token%_1" | findstr "cmd" >nul 2>nul && set Child1=1 || set Child1=
tasklist /fi "WINDOWTITLE eq %Token%_2" | findstr "cmd" >nul 2>nul && set Child2=1 || set Child2=
if not defined Child1 if not defined Child2 goto endloop
goto loop
:endloop
echo Both children died.
Run Code Online (Sandbox Code Playgroud)
child1并且child2正在执行pause.这使用或多或少的唯一标记来标识子批处理文件.它们在一个自己的窗口中启动,start每个窗口都有一个特定的窗口标题.使用该窗口标题我们可以再次使用它们tasklist并确定它们是否仍在运行.
弄清楚批处理文件是否仍在运行有点棘手.tasklist使用窗口标题过滤器执行它应该执行的操作,但它不会返回合理的错误级别.这就是为什么我们必须通过管道findstr来获取进程名称(以避免通过选择错误消息对语言敏感).