我想从批处理文件(也是批处理文件)启动两个程序 - 它们将执行几秒钟。然后在主批处理文件中我想等待两个都完成然后继续主执行。这有可能吗?
答案 0 :(得分:8)
你可以,有点:
@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.
child1
和child2
刚刚执行pause
。这使用或多或少的唯一标记来标识子批处理文件。它们在start
的自己的窗口中启动,每个窗口都有一个特定的窗口标题。使用该窗口标题,我们可以使用tasklist
再次找到它们,并确定它们是否仍在运行。
弄清楚批处理文件是否仍在运行有点棘手。带有窗口标题过滤器的tasklist
会执行它应该执行的操作,但它不会返回合理的错误级别。这就是为什么我们必须通过findstr
来获取进程名称(以避免因为选择错误消息而对语言敏感)。