Кто-нибудь знает, есть ли cmd-скрипт, который делает это и / или инструмент командной строки, готовый к работе?
Кто-нибудь знает, есть ли cmd-скрипт, который делает это и / или инструмент командной строки, готовый к работе?
Ответы:
Создайте три пакетных файла ниже. Main.bat запускает 1.bat и 2.bat
1.bat и 2.bat записывают временные файлы, которые проверяет main.bat. Пока 1.bat и 2.bat работают, main.bat сообщает, что обработка все еще происходит. Когда вы нажимаете ввод в открытом окне 1.bat или 2.bat, временный файл удаляется, и программа завершает работу. Это имитирует остановку обработки для этого файла .bat. Если вы сделаете это для 1 и 2.bat, main.bat сообщит вам, что обработка для этих процессов завершена. Вы можете заставить 1.bat и 2.bat делать все, что захотите, при условии, что вы очистите временный файл, когда закончите. На этом этапе main.bat также может делать все, что вы хотите.
1.bat
echo %time% > 1.tmp
pause
del 1.tmp
exit
2.bat
echo %time% > 2.tmp
pause
del 2.tmp
exit
main.bat
@echo off
start "1" 1.bat
start "2" 2.bat
@ping -n 1 127.0.0.1 > nul
:loop
@echo Processing......
if not exist *.tmp goto :next
@ping -n 5 127.0.0.1 > nul
goto loop
:next
@echo Done Processing!
Достаточно просто, если процессы не требуют стандартного ввода или вывода. Из командной строки или в командном файле:
process1 | process2 | process3 | process4
Это запустит все четыре процесса одновременно и не вернется, пока все они не завершатся. (Возможное исключение: если процесс явно закрывает стандартный вывод, он может быть обработан, как если бы он вышел. Но это необычно, очень немногие процессы делают это.)
Я не уверен, сколько именно процессов вы можете запустить одновременно таким образом. Я пробовал до десяти.
Единственный способ сделать это - запустить отдельные командные файлы (см. start /?
), Которые запускают отдельную задачу, и написать текстовый файл по завершении. Затем вы периодически проверяете, были ли созданы текстовые файлы.
Вы можете посмотреть командлет Powershell Start-Job. Это должно позволить вам сделать это. Подробнее здесь Powershell - это предпочтительная оболочка Microsoft. Это намного мощнее, чем сценарии cmd и хорошо тратит ваше время
Или вы можете использовать это: http://www.out-web.net/?p=167
Я сделал это, это работает, однако иногда случается, что PID завершенного процесса немедленно повторно используется другим процессором Windows, который только что запустился, и это делает обнаружение конца вашего процесса опасным / ошибочным.
Я тоже искал похожую задачу. Цель состояла в том, чтобы запустить несколько команд параллельно и извлечь вывод (stdout & error) всех параллельных процессов. Затем дождитесь завершения всех параллельных процессов и выполните другую команду. Ниже приведен пример кода для файла BAT, который может быть выполнен в CMD:
(
start "" /B cmd /c ping localhost -n 6 ^>nul
timeout /t 5 /nobreak
start "" /B /D "C:\users\username\Desktop" cmd /c dir ^> dr.txt ^2^>^&^1
start "" /B cmd /c ping localhost -n 11 ^>nul
timeout /t 10 /nobreak
) | pause
Echo waited
timeout /t 12 /nobreak
()
Сначала выполняются все операторы внутри , ждите их завершения, затем выполняются две последние строки. Все команды, начинающиеся с start
, выполняются одновременно.
Эти ссылки полезны: /programming//a/43762349/9689416 и https://ss64.com/nt/start.html.