具有多个依赖项和可能的异步的Windows批处理脚本

时间:2012-04-11 15:09:10

标签: windows batch-file

如何在Windows中运行一系列命令,其中一些命令依赖于其他命令的完成,一些命令可以异步同时启动。像这样:

命令1

当命令1完成时,启动命令2

当命令2完成时,同时启动命令3,4

当命令3完成时,同时启动命令5,6和7

当命令4完成时,同时启动命令8,9和10

1 个答案:

答案 0 :(得分:1)

您展示的场景非常简单,因为每个步骤都取决于只有一个前任的完成。不需要民意调查。

您没有说出每个命令是什么。首先,我将假设它们都是同步运行的批处理或控制台命令。换句话说,批处理文件在前一个命令完成之前不会继续执行下一个命令。在这种情况下,只要您想要异步启动命令,就只能使用START命令。

您可以使用2个批处理脚本轻松实现您的方案。 stepA.bat将启动整个过程。

stepA.bat

@echo off
command1
start "" stepB.bat
command4
start "" command8
start "" command9
command10

stepB.bat

@echo off
command3
start "" command5
start "" command6
command7

如果command1,command4或command3是批处理脚本,则必须使用CALL调用它,否则控件将不会返回给调用者。例如,如果command1是“someScript.bat”,那么您需要使用call someScript.bat

如果command1,command4或command3不是控制台命令,而是打开自己的窗口的命令(例如notepad.exe),则默认情况下该命令将异步运行,批处理文件将在命令之前继续完成。您必须使用START / WAIT使其同步。因此,如果command1是“notepad.exe”,那么您需要使用start "" /wait notepad.exe

如果command5,command6,command8或command9不是控制台命令(换句话说它们本质上是异步的),那么你不需要使用START,尽管这样做并没有什么坏处。

您可能希望以异步方式启动A1,A2和A3,然后仅在A1,A2和A3全部完成时启动B.这将需要某种形式的轮询来确定三者何时完成。每个A进程必须在它们完成时以某种方式发出信号,并且B必须重复轮询并等待它继续之前接收所有3个信号。一种形式的信号可能是文件的创建,但有很多选择。