Возможно, вы захотите, чтобы команда START инициировала параллельную обработку, хотя это можно сделать через WMIC. Обратите внимание, что первый аргумент обрабатывается как заголовок окна, если он заключен в кавычки. Вот почему мой первый аргумент - пустая строка. Параметр /B
запускает команду в том же окне. Удалите его, если вы хотите новое окно для каждой команды.
Нет простой встроенной пакетной команды или опции для ожидания завершения ряда параллельных процессов.
Мне нравится перенаправлять неиспользуемый дескриптор файла в файл для каждого процесса, таким образом устанавливая исключительную блокировку. Затем я могу определить, запущен ли еще процесс, пытаясь перенаправить (CALL )
(фактически нулевой оператор) в тот же файл блокировки. Если перенаправление не удается, то процесс все еще выполняется. Успех означает, что процесс завершен.
Тест должен быть выполнен для каждого из файлов блокировки в цикле опроса. Добавление задержки является хорошей идеей для предотвращения злоупотребления ресурсами в цикле опроса.
@echo off
set "lock=%temp%\%~nx0.lock"
start "" /b "timeout" 5 9>"%lock%.1"
start "" /b "timeout" 8 9>"%lock%.2"
:wait
timeout 1 /nobreak >nul
2>nul (for %%F in ("%lock%.*") do 9>"%%F" (call ) && del "%%F" || goto :wait)
echo OK
Если у вас есть большое количество параллельных процессов для запуска, и вы хотите ограничить количество одновременных процессов, то вас может заинтересовать https://stackoverflow.com/a/11715437/1012053