Qualcuno sa se esiste uno script cmd che lo fa e / o uno strumento da riga di comando pronto per il lavoro?
Qualcuno sa se esiste uno script cmd che lo fa e / o uno strumento da riga di comando pronto per il lavoro?
Risposte:
Creare i tre file batch di seguito. Main.bat lancia 1.bat e 2.bat
1.bat e 2.bat scrivono file temporanei per i quali main.bat controlla. Mentre 1.bat e 2.bat funzionano, main.bat riporta che l'elaborazione è ancora in corso. Quando premi Invio sulla finestra aperta di 1.bat o 2.bat, il file temporaneo viene eliminato e il programma termina. Questo simula l'interruzione dell'elaborazione per quel file .bat. Se lo fai per 1 e 2.bat, main.bat ti informa che l'elaborazione è stata completata per questi processi. Puoi fare in modo che 1.bat e 2.bat facciano tutto quello che vuoi, purché tu abbia finito il file temporaneo. A questo punto main.bat può fare anche tutto quello che vuoi.
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!
Abbastanza semplice, a condizione che i processi non richiedano input o output standard. Dalla riga di comando o in un file batch:
process1 | process2 | process3 | process4
Questo eseguirà tutti e quattro i processi contemporaneamente e non tornerà finché non saranno usciti tutti. (Possibile eccezione: se un processo chiude esplicitamente l'output standard, potrebbe essere trattato come se fosse uscito. Ma è insolito, pochissimi processi lo fanno.)
Non sono sicuro di quanti processi sia possibile avviare contemporaneamente in questo modo. Ho provato fino a dieci.
L'unico modo per farlo è avviare file batch separati (vedere start /?
) che eseguono la singola attività e scrivere un file di testo al completamento. Quindi, si controlla periodicamente se i file di testo sono stati creati.
È possibile esaminare il cmdlet Start-Job di Powershell. Dovrebbe permetterti di farlo. Altro qui Powershell è la shell scelta da Microsoft. È molto più potente degli script cmd e ben investe l'investimento del tuo tempo
Oppure puoi usare questo: http://www.out-web.net/?p=167
L'ho fatto, funziona, tuttavia a volte capita che il PID del processo finito venga immediatamente riutilizzato da un altro processus di Windows appena avviato, e rende pericoloso / errato il rilevamento della fine del processo.
Stavo anche cercando un compito simile. L'obiettivo era eseguire più comandi in parallelo ed estrarre l'output (stdout ed errore) di tutti i processi paralleli. Quindi attendere il completamento di tutti i processi paralleli ed eseguire un altro comando. Di seguito è riportato un codice di esempio per il file BAT, che può essere eseguito in 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
Tutte le istruzioni all'interno ()
vengono eseguite per prime, attendi che vengano completate, quindi vengono eseguite le ultime due righe. Tutti i comandi che iniziano con start
vengono eseguiti contemporaneamente.
Questi link sono utili: /programming//a/43762349/9689416 e https://ss64.com/nt/start.html