Хто-небудь знає, чи є сценарій cmd, який робить це та / або інструмент командного рядка готовий до роботи?
Хто-небудь знає, чи є сценарій cmd, який робить це та / або інструмент командного рядка готовий до роботи?
Відповіді:
Створіть три пакетні файли нижче. Main.bat запускає 1.bat та 2.bat
1.bat і 2.bat виписують тимчасові файли, на які main.bat перевіряє. Поки 1.bat і 2.bat працюють, main.bat повідомляє, що обробка все ще відбувається. Якщо натиснути клавішу Enter у відкритому вікні 1.bat або 2.bat, тимчасовий файл видаляється, а програма виходить. Це імітує зупинку обробки для цього файлу .bat. Якщо ви робите це як для 1, так і для 2.bat, main.bat повідомляє вам, що обробка завершена для цих процесів. Ви можете змусити 1.bat і 2.bat робити все, що завгодно, доки ви очистите тимчасовий файл, коли закінчите. На цьому етапі main.bat може робити все, що завгодно, а також.
1.бат
echo %time% > 1.tmp
pause
del 1.tmp
exit
2.бат
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