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. Вы можете использоватьМодуль 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, он вызывает один файл BAT из другого файла BAT

для получения дополнительной информации проверьтеhttps://www.robvanderwoude.com/call.php

решение3

В пакетных файлах нет встроенных средств для решения этой проблемы.

Вы можете изменить 4 пакетных файла, чтобы создать файл флага, когда они будут готовы. Затем в основном пакетном файле запустите цикл поиска файлов флагов с вызовом timeout /t 10в цикле, чтобы замедлить проверки.

Связанный контент