cmd - 在所有其他並發批次檔完成後執行批次檔

cmd - 在所有其他並發批次檔完成後執行批次檔

我有一個簡單的批次文件,它調用其他批次文件,它看起來像這樣:

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小時內完成。

在所有四個文件完成後,我需要另一個腳本來進行一些清理。但是 run_last.bat 不會等待前 4 個文件,它會與前 4 個文件同時呼叫。

有辦法實現嗎?

謝謝。

答案1

停止使用過時的命令提示字元並使用 Powershell。您可以使用線程作業模組,如中所述這個關於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,它從一個bath檔案呼叫另一個bath文件

欲了解更多信息,請檢查https://www.robvanderwoude.com/call.php

答案3

批次檔沒有內建任何東西來處理這個問題。

您可以修改 4 個批次文件,以在完成後建立一個標誌文件。然後在主批次檔中,執行一個迴圈來尋找標誌文件,並在迴圈中呼叫timeout /t 10來減慢檢查速度。

相關內容