我有一个简单的批处理文件,它调用其他批处理文件,它看起来像这样:
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 不会等待前四个文件,它会在前四个文件执行完后同时被调用。
有没有什么办法可以实现它?
谢谢。
答案1
停止使用过时的命令提示符,使用 Powershell。您可以使用ThreadJob 模块,如所述这个很好的答案:
$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
在循环中调用以减慢检查速度。