Di si tengo
- foo.exe
- bar.exe
- baz.exe
¿Cómo ejecuto todos ellos desde un archivo por lotes de forma asincrónica, es decir, sin esperar a que se detenga el programa anterior?
batch-file
cmd
RichN
fuente
fuente
help
cuidadosamente. :)Combinando un par de respuestas anteriores, podrías intentarlo
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:
Si tiene algo como Process Explorer (Sysinternals), verá unos pocos procesos cmd.exe secundarios, cada uno con un proceso java (según los comandos anteriores). La salida se imprimirá en la pantalla en el orden en que terminen.
fuente
echo off
al principio que, cuando ejecute la secuencia de comandos, evitará que todos los comandos se repitan en la consola. El@
es similar pero solo para ese comando único. Entonces, a veces lo verás@echo off
.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; puede matarlo solo con CTRL-BREAK (o cerrando la ventana, o mediante el Administrador de tareas).
fuente
BREAK
en los teclados en estos días?Cree un archivo por lotes con las siguientes líneas:
El comando de inicio ejecuta su comando en una nueva ventana, por lo que los 3 comandos se ejecutarían de forma asincrónica.
fuente
Use el comando START :
Si la ruta al programa contiene espacios, recuerde agregar comillas. En este caso, también debe proporcionar un título para la ventana de apertura de la consola
Si necesita proporcionar argumentos, agréguelos al final (fuera de las comillas)
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
fuente
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 sea un proceso bastante sencillo.
Hay un clon win32 Xargs llamado PPX2 que lo hace bastante sencillo.
Por ejemplo, si desea transcodificar un directorio de archivos de video, puede ejecutar el comando:
Seleccionando esto,
dir /b *.mpg
toma una lista de archivos .mpg en mi directorio actual, el|
operador canaliza esta lista en ppx2, que luego construye una serie de comandos para ejecutar en paralelo; 4 a la vez, según lo especificado aquí por el-P 4
operador. El-L 1
operador le dice a ppx2 que solo envíe una línea de nuestro directorio a ffmpeg a la vez.Después de eso, solo escribe 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 a todos los casos, pero es mucho más fácil que usar las soluciones alternativas de archivos por lotes detalladas anteriormente. Por supuesto, si no está lidiando con una lista de archivos, también puede canalizar el contenido de un archivo de texto o cualquier otro programa en la entrada de pxx2.
fuente
No pude hacer que nada funcionara. Terminé usando Powershell para iniciar scripts de murciélagos. A veces, incluso comenzar cmd / c no funciona, no estoy seguro de por qué. Incluso probé cosas como iniciar el bloc de notas cmd / c y salir
fuente