【发布时间】:2013-12-20 07:24:58
【问题描述】:
我想从批处理文件(也是批处理文件)启动两个程序 - 它们将执行几秒钟。然后在主批处理文件中,我想等待两者都完成,然后继续主执行。这可能吗?
【问题讨论】:
-
@DmitriyBotov:不过,这仅适用于 one 批处理文件。他们希望同时运行两个,并且只有在两个都停止时才继续执行。
标签: batch-file cmd
我想从批处理文件(也是批处理文件)启动两个程序 - 它们将执行几秒钟。然后在主批处理文件中,我想等待两者都完成,然后继续主执行。这可能吗?
【问题讨论】:
标签: batch-file cmd
你可以,有点:
@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 来获取进程名称(以避免通过获取错误消息而对语言敏感)。
【讨论】: