【问题标题】:Can you fork in Windows batch file?你可以在 Windows 批处理文件中分叉吗?
【发布时间】:2013-12-20 07:24:58
【问题描述】:

我想从批处理文件(也是批处理文件)启动两个程序 - 它们将执行几秒钟。然后在主批处理文件中,我想等待两者都完成,然后继续主执行。这可能吗?

【问题讨论】:

标签: batch-file cmd


【解决方案1】:

你可以,有点:

@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.

child1child2 正在执行 pause。这使用或多或少唯一的标记来标识子批处理文件。它们以start 在自己的窗口中启动,每个窗口都有一个特定的窗口标题。使用该窗口标题,我们可以使用tasklist 再次找到它们并确定它们是否仍在运行。

确定批处理文件是否仍在运行有点棘手。 tasklist 带有窗口标题过滤器可以完成它应该做的事情,但它不会返回合理的错误级别。这就是为什么我们必须通过findstr 来获取进程名称(以避免通过获取错误消息而对语言敏感)。

【讨论】:

  • 行得通!你知道它是否仍然可以作为计划任务工作?
猜你喜欢
  • 2014-09-05
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 2012-12-13
  • 2021-03-20
相关资源
最近更新 更多