Alguém sabe se existe um script cmd que faz isso e / ou uma ferramenta de linha de comando pronta para o trabalho?
Alguém sabe se existe um script cmd que faz isso e / ou uma ferramenta de linha de comando pronta para o trabalho?
Respostas:
Crie os três arquivos em lotes abaixo. Main.bat lança 1.bat e 2.bat
1.bat e 2.bat gravam arquivos temporários para os quais o main.bat verifica. Enquanto o 1.bat e o 2.bat estão funcionando, o main.bat informa que o processamento ainda está ocorrendo. Quando você pressiona enter na janela aberta 1.bat ou 2.bat, o arquivo temporário é excluído e o programa é encerrado. Isso simula a parada do processamento para esse arquivo .bat. Se você fizer isso para 1 e 2.bat, o main.bat informará que o processamento foi concluído para esses processos. Você pode fazer com que 1.bat e 2.bat façam o que quiser, desde que limpe o arquivo temporário quando terminar. Nesse ponto, o main.bat também pode fazer o que você quiser.
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!
Simples o suficiente, desde que os processos não precisem de entrada ou saída padrão. Na linha de comando ou em um arquivo em lotes:
process1 | process2 | process3 | process4
Isso executará todos os quatro processos simultaneamente e não retornará até que todos tenham saído. (Possível exceção: se um processo fechar explicitamente a saída padrão, ele poderá ser tratado como se tivesse saído. Mas isso é incomum, muito poucos processos fazem isso.)
Não sei exatamente quantos processos você pode iniciar simultaneamente dessa maneira. Eu tentei até dez.
A única maneira de fazer isso é iniciar arquivos em lote separados (consulte start /?
) que executam a tarefa individual e gravam um arquivo de texto após a conclusão. Em seguida, você verifica periodicamente se os arquivos de texto foram criados.
Você pode olhar para o cmdlet Powershell Start-Job. Deve permitir que você faça isso. Mais aqui O Powershell é o shell preferido da Microsoft. É muito mais poderoso que os scripts cmd e bem o investimento do seu tempo
Ou você pode usar isso: http://www.out-web.net/?p=167
Eu fiz isso, funciona, no entanto, às vezes acontece que o PID do processo finalizado é reutilizado imediatamente por outro processo do Windows que acabou de iniciar e torna a detecção do final do seu processo arriscada / incorreta.
Eu também estava procurando uma tarefa semelhante. O objetivo era executar vários comandos em paralelo e extrair a saída (stdout e erro) de todos os processos paralelos. Aguarde todos os processos paralelos concluírem e executem outro comando. A seguir está um código de amostra para o arquivo BAT, que pode ser executado no 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
Todas as instruções internas ()
são executadas primeiro, aguarde a conclusão e as duas últimas linhas são executadas. Todos os comandos iniciados com start
são executados simultaneamente.
Esses links são úteis: /programming//a/43762349/9689416 e https://ss64.com/nt/start.html