¿Alguien sabe si hay un script cmd que lo haga y / o una herramienta de línea de comando lista para el trabajo?
¿Alguien sabe si hay un script cmd que lo haga y / o una herramienta de línea de comando lista para el trabajo?
Respuestas:
Cree los tres archivos por lotes a continuación. Main.bat lanza 1.bat y 2.bat
1.bat y 2.bat escriben archivos temporales para los cuales main.bat comprueba. Mientras 1.bat y 2.bat están funcionando, main.bat informa que el procesamiento todavía está ocurriendo. Cuando presionas enter en la ventana abierta de 1.bat o 2.bat, el archivo temporal se elimina y el programa se cierra. Esto simula el proceso de detención para ese archivo .bat. Si hace esto para 1 y 2.bat, main.bat le informa que el procesamiento se ha completado para estos procesos. Puede hacer que 1.bat y 2.bat hagan lo que quiera, siempre que borre el archivo temporal cuando haya terminado. En este punto, main.bat puede hacer lo que usted quiera que haga también.
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!
Suficientemente simple, siempre que los procesos no necesiten entrada o salida estándar. Desde la línea de comando o en un archivo por lotes:
process1 | process2 | process3 | process4
Esto ejecutará los cuatro procesos simultáneamente, y no volverá hasta que todos hayan salido. (Posible excepción: si un proceso cierra explícitamente la salida estándar, podría tratarse como si hubiera salido. Pero eso es inusual, muy pocos procesos lo hacen).
No estoy seguro de cuántos procesos puede iniciar simultáneamente de esta manera. He probado hasta diez.
La única forma de hacer esto es iniciar archivos por lotes separados (ver start /?
) que ejecutan la tarea individual y escribir un archivo de texto al finalizar. Luego, verifica periódicamente si se han creado los archivos de texto.
Puede consultar el cmdlet Powershell Start-Job. Debería permitirte hacer esto. Más aquí Powershell es el shell de elección de Microsoft. Es mucho más potente que los scripts de cmd y vale la pena invertir su tiempo.
O puede usar esto: http://www.out-web.net/?p=167
Lo hice, funciona, sin embargo, a veces sucede que el PID del proceso terminado es reutilizado inmediatamente por otro proceso de Windows que acaba de comenzar, y hace que la detección del final de su proceso sea peligrosa / errónea.
También estaba buscando una tarea similar. El objetivo era ejecutar múltiples comandos en paralelo y extraer la salida (stdout y error) de todos los procesos paralelos. Luego espere a que finalicen todos los procesos paralelos y ejecute otro comando. El siguiente es un código de muestra para el archivo BAT, se puede ejecutar en 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 las declaraciones dentro ()
se ejecutan primero, espere a que se completen, luego se ejecutan las últimas dos líneas. Todos los comandos que comienzan start
se ejecutan simultáneamente.
Estos enlaces son útiles: https://stackoverflow.com/a/43762349/9689416 y https://ss64.com/nt/start.html