
我有一個簡單的批次文件,它調用其他批次文件,它看起來像這樣:
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
來減慢檢查速度。