![cmd - 他のすべての同時バッチファイルが終了した後にバッチファイルを実行します](https://rvso.com/image/770100/cmd%20-%20%E4%BB%96%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E5%90%8C%E6%99%82%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E7%B5%82%E4%BA%86%E3%81%97%E3%81%9F%E5%BE%8C%E3%81%AB%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%BE%E3%81%99.png)
他のバッチ ファイルを呼び出す単純なバッチ ファイルがあります。次のようになります。
start /b run_part1.bat
start /b run_part2.bat
start /b run_part3.bat
start /b run_part4.bat
run_last.bat // fires immediately, how to make this line wait until above finishes?
/b を使用すると、最初の 4 つのファイルが同時に実行されます。すべて 1.5 時間以内に完了します。
4 つのファイルがすべて終了した後にクリーンアップを実行する別のスクリプトが必要です。ただし、run_last.bat は最初の 4 つのファイルを待たず、最初の 4 つのファイルと同時に呼び出されます。
それを達成する方法はありますか?
ありがとう。
答え1
時代遅れのコマンドプロンプトの使用をやめてPowershellを使いましょう。ThreadJob モジュール、に記載されているようにSOのこの素晴らしい回答:
$commands = { ./run_part1.bat },
{ ./run_part2.bat },
{ ./run_part3.bat },
{ ./run_part4.bat }
$jobs = $commands | Foreach-Object { Start-ThreadJob $_ }
$jobs | Receive-Job -Wait -AutoRemoveJob
./run_last.bat
答え2
CALLを使用すると、あるバスファイルを別のバスファイルから呼び出すことができます。
答え3
これを処理するためのバッチ ファイルは組み込まれていません。
4 つのバッチ ファイルを変更して、完了時にフラグ ファイルを作成できます。次に、メイン バッチ ファイルで、timeout /t 10
ループ内で を呼び出してフラグ ファイルを検索するループを実行し、チェックの速度を低下させます。