batch-file - off - ejecutar archivo bat automaticamente
Ejecutar comandos de archivo por lotes de Windows de forma asÃncrona (6)
Combinando un par de las respuestas anteriores, podrías probar start /b cmd /c foo.exe
.
Para un ejemplo trivial, si desea imprimir las versiones de java / groovy / grails / gradle, puede hacerlo en un archivo por lotes:
@start /b cmd /c java -version
@start /b cmd /c gradle -version
@start /b cmd /c groovy -version
@start /b cmd /c grails -version
Si tiene algo así como Process Explorer (Sysinternals), verá unos pocos procesos secundarios cmd.exe, cada uno con un proceso java (según los comandos anteriores). La salida se imprimirá en la pantalla en el orden en que termine.
start /b : Start application without creating a new window. The
application has ^C handling ignored. Unless the application
enables ^C processing, ^Break is the only way to interrupt
the application
cmd /c : Carries out the command specified by string and then terminates
Diga, si tengo
- foo.exe
- bar.exe
- baz.exe
¿Cómo ejecuto todos ellos desde un archivo por lotes de forma asíncrona, es decir, sin esperar a que se detenga el programa anterior?
Crea un archivo por lotes con las siguientes líneas:
start foo.exe
start bar.exe
start baz.exe
El START ejecuta su comando en una nueva ventana, por lo que los 3 comandos se ejecutarán de forma asincrónica.
Hay una tercera opción (y potencialmente mucho más fácil). Si desea activar múltiples instancias de un solo programa, usar un procesador de comandos de estilo Unix como Xargs o GNU Parallel puede hacer que el proceso sea bastante sencillo.
Hay un clon de win32 Xargs llamado PPX2 que lo hace bastante sencillo.
Por ejemplo, si desea transcodificar un directorio de archivos de video, puede ejecutar el comando:
dir /b *.mpg |ppx2 -P 4 -I {} -L 1 ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
Escogiendo esto aparte, dir /b *.mpg
toma una lista de archivos .mpg en mi directorio actual, el |
el operador coloca esta lista en ppx2, que luego construye una serie de comandos para ser ejecutados en paralelo; 4 a la vez, como se especifica aquí por el operador -P 4
. El operador -L 1
le dice a ppx2 que solo envíe una línea de nuestra lista de directorios a ffmpeg a la vez.
Después de eso, solo debe escribir su línea de comando ( ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
), y {}
se sustituye automáticamente por cada línea de su listado de directorio.
No es universalmente aplicable en todos los casos, pero es mucho más fácil que usar las soluciones de archivo por lotes detalladas anteriormente. Por supuesto, si no está tratando con una lista de archivos, también puede canalizar el contenido de un archivo de texto o cualquier otro programa a la entrada de pxx2.
Puede usar el comando de inicio para generar procesos en segundo plano sin iniciar nuevas ventanas:
start /b foo.exe
El nuevo proceso no será interrumpible con CTRL-C; puedes matarlo solo con CTRL-BREAK (o cerrando la ventana, o a través del Administrador de tareas).
Use el comando START :
start [programPath]
Si la ruta del programa contiene espacios, recuerde agregar comillas. En este caso, también debe proporcionar un título para la ventana de la consola de apertura
start "[title]" "[program path]"
Si necesita proporcionar argumentos, agréguelos al final (fuera de las comillas de comando)
start "[title]" "[program path]" [list of command args]
Use la opción / b para evitar abrir una nueva ventana de consola (pero en ese caso no puede interrumpir la aplicación usando CTRL-C
Utilizar el comando START
para ejecutar cada programa debería proporcionarle lo que necesita:
START "title" [/D path] [options] "command" [parameters]
Cada invocación START
ejecuta el comando dado en su parámetro y regresa inmediatamente, a menos que se ejecute con un /WAIT
.
Eso se aplica a las aplicaciones de línea de comandos. Las aplicaciones sin línea de comando regresan inmediatamente de todos modos, así que para estar seguro, si desea ejecutar todas de manera asincrónica, use START
.