0

How can you run a series of commands in windows where some depend on the completion of others and some can be launch at the same time asynchronously. Something like this:

command 1

when command 1 completes, launch commands 2

when command 2 completes, launch commands 3, 4 at the same time

when command 3 completes, launch commands 5, 6 and 7 at the same time

when command 4 completes, launch commands 8, 9 and 10 at the same time

4

1 回答 1

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 个信号才能继续。一种形式的信号可能是创建文件,但有很多选择。

于 2012-04-11T16:47:15.260 回答