¿Cómo ejecuto un archivo bat en el fondo de otro archivo bat?

Tengo un script de “configuración” que ejecuto en la mañana que inicia todos los progtwigs que necesito. Ahora, algunos de ellos necesitan configuración adicional del entorno, por lo que debo envolverlos en pequeños scripts BAT.

¿Cómo ejecuto una secuencia de comandos de este tipo en Windows XP en segundo plano?

CALL env-script.bat ejecuta de forma síncrona, es decir, la secuencia de comandos de instalación solo puede continuar después de que el comando en el env-script haya finalizado.

START/B env-script.bat ejecuta otra instancia de CMD.exe en el mismo símbolo del sistema, dejándolo en un estado realmente desordenado (veo la salida del CMD.exe nested, el teclado está muerto por un tiempo, el script no está ejecutado).

START/B CMD env-script.bat produce el mismo resultado. Ninguno de los indicadores en CMD parece coincidir con mi factura.

En realidad, lo siguiente funciona bien para mí y crea nuevas ventanas:

test.cmd:

 @echo off call "cmd /c start test2.cmd" call "cmd /c start test3.cmd" echo Foo pause 

test2.cmd

 @echo off echo Test 2 pause exit 

test3.cmd

 @echo off echo Test 3 pause exit 

Combine eso con los parámetros para start , como /min , como lo señaló Moshe si no quiere que las ventanas nuevas aparezcan frente a usted.

Dos años de edad, pero para completar …

Enfoque estándar, en línea: (es decir, comportamiento que obtendría al usar & en Linux)

 START /B CMD /C CALL "foo.bat" [args [...]] 

Notas: 1. CALL se empareja con el archivo .bat porque allí donde normalmente se CMD /C CALL "foo.bat" … (es decir, esta es solo una extensión del formulario CMD /C CALL "foo.bat" para que sea asíncrono. Por lo general, se requiere que sea correcto obtener códigos de salida, pero eso no es un problema aquí); 2. Las comillas dobles alrededor del archivo .bat solo son necesarias si el nombre contiene espacios. (El nombre podría ser una ruta, en cuyo caso hay más probabilidad de eso).

Si no quieres la salida:

 START /B CMD /C CALL "foo.bat" [args [...]] >NUL 2>&1 

Si quieres que el bate se ejecute en una consola independiente: (es decir, otra ventana)

 START CMD /C CALL "foo.bat" [args [...]] 

Si desea que la otra ventana permanezca después:

 START CMD /K CALL "foo.bat" [args [...]] 

Nota: En realidad, esta es una forma pobre, a menos que tenga usuarios que específicamente quieran usar la ventana abierta como una consola normal. Si solo desea que la ventana se quede para ver el resultado, es mejor que coloque una PAUSE al final del archivo bat. O aún, agregue ^& PAUSE después de la línea de comando:

 START CMD /C CALL "foo.bat" [args [...]] ^& PAUSE 

Como START es la única forma de ejecutar algo en segundo plano a partir de un script CMD, le recomendaría que siga usándolo. En lugar del modificador / B, pruebe / MIN para que la ventana recién creada no le moleste. Además, puede establecer la prioridad en algo más bajo con / LOW o / BELOWNORMAL, lo que debería mejorar la capacidad de respuesta de su sistema.

Aparte del término de primer plano / fondo. Otra forma de ocultar la ventana en ejecución es a través de vbscript, si todavía está disponible en su sistema.

 DIM objShell set objShell=wscript.createObject("wscript.shell") iReturn=objShell.Run("yourcommand.exe", 0, TRUE) 

nombrarlo como sth.vbs y llamarlo desde bat, ponerlo en la tarea progtwigda, etc. Personalmente, inhabilitaré vbs sin prisa en cualquier sistema de Windows que administre 🙂

Cree una nueva aplicación de Windows C # y llame a este método desde main:

 public static void RunBatchFile(string filename) { Process process = new Process(); process.StartInfo.FileName = filename; // suppress output (command window still gets created) process.StartInfo.Arguments = "> NULL"; process.Start(); process.WaitForExit(); } 

Esto funciona en mi instalación de Windows XP Home, la forma de Unix:

 call notepad.exe & 

En realidad es bastante fácil con esta opción al final:

c: \ start BATCH.bat -WindowStyle Hidden