ウィンドウで一連のコマンドを実行するにはどうすればよいでしょうか。一部は他のコマンドの完了に依存し、一部は同時に非同期で起動できます。このようなもの:
コマンド 1
コマンド 1 が完了したら、コマンド 2 を起動します
コマンド 2 が完了したら、コマンド 3、4 を同時に起動します
コマンド 3 が完了したら、コマンド 5、6、および 7 を同時に起動します。
コマンド 4 が完了したら、コマンド 8、9、10 を同時に起動します
ウィンドウで一連のコマンドを実行するにはどうすればよいでしょうか。一部は他のコマンドの完了に依存し、一部は同時に非同期で起動できます。このようなもの:
コマンド 1
コマンド 1 が完了したら、コマンド 2 を起動します
コマンド 2 が完了したら、コマンド 3、4 を同時に起動します
コマンド 3 が完了したら、コマンド 5、6、および 7 を同時に起動します。
コマンド 4 が完了したら、コマンド 8、9、10 を同時に起動します
各ステップは 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 を起動するシナリオを作成できます。これには、3 つすべてがいつ完了したかを判断するために何らかの形式のポーリングが必要になります。A プロセスのそれぞれは、完了時になんらかの方法でシグナルを出す必要があり、B は続行する前に、3 つのシグナルすべてを受信するまで繰り返しポーリングして待機する必要があります。信号の 1 つの形式はファイルの作成ですが、多くのオプションがあります。