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

具有多个依赖项和可能异步的Windows批处理脚本,windows,batch-file,Windows,Batch File,如何在windows中运行一系列命令,其中有些命令依赖于其他命令的完成,有些命令可以同时异步启动。大概是这样的: 命令1 命令1完成后,启动命令2 命令2完成后,同时启动命令3、4 命令3完成后,同时启动命令5、6和7 当命令4完成时,同时启动命令8、9和10。您布置的场景非常简单,因为每个步骤仅取决于一个先驱者的完成。不需要轮询 你不能说每个命令都是什么。首先,我将假设它们都是批处理或控制台命令,本质上是同步运行的。换句话说,批处理文件在上一个命令完成之前不会继续执行下一个命令。在这种情况下,

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

命令1

命令1完成后,启动命令2

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

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


当命令4完成时,同时启动命令8、9和10。您布置的场景非常简单,因为每个步骤仅取决于一个先驱者的完成。不需要轮询

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

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

蝙蝠

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

@echo off
command3
start "" command5
start "" command6
command7
如果command1、command4或command3是批处理脚本,则必须使用CALL调用它,否则控制将不会返回给调用方。例如,如果command1是“someScript.bat”,则需要使用
调用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个信号后才能继续。信号的一种形式可能是创建一个文件,但有很多选择