windows-xp - punto - programacion batch
¿Cómo ejecuto un archivo bat en el fondo de otro archivo bat? (7)
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 programada, etc. Personalmente, inhabilitaré vbs sin prisa en cualquier sistema de Windows que administre :)
Tengo un script de "configuración" que ejecuto en la mañana que inicia todos los programas 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 anidado, 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.
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.
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();
}
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
En realidad es bastante fácil con esta opción al final:
c: / start BATCH.bat -WindowStyle Hidden
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.
Esto funciona en mi instalación de Windows XP Home, la forma de Unix:
call notepad.exe &