如何在Windows中运行一系列命令,其中一些命令依赖于其他命令的完成,一些命令可以异步同时启动。像这样:
命令1
当命令1完成时,启动命令2
当命令2完成时,同时启动命令3,4
当命令3完成时,同时启动命令5,6和7
当命令4完成时,同时启动命令8,9和10
答案 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个信号。一种形式的信号可能是文件的创建,但有很多选择。