![cmd - 在所有其他並發批次檔完成後執行批次檔](https://rvso.com/image/770100/cmd%20-%20%E5%9C%A8%E6%89%80%E6%9C%89%E5%85%B6%E4%BB%96%E4%B8%A6%E7%99%BC%E6%89%B9%E6%AC%A1%E6%AA%94%E5%AE%8C%E6%88%90%E5%BE%8C%E5%9F%B7%E8%A1%8C%E6%89%B9%E6%AC%A1%E6%AA%94.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小時內完成。
在所有四個文件完成後,我需要另一個腳本來進行一些清理。但是 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
來減慢檢查速度。