Tengo un script de "instalación" que ejecuto por la mañana y que inicia todos los programas que necesito. Ahora, algunos de ellos necesitan una configuración adicional del entorno, por lo que necesito envolverlos en pequeños scripts BAT.
¿Cómo ejecuto un script de este tipo en Windows XP en segundo plano?
CALL env-script.bat
lo ejecuta sincrónicamente, es decir, el script de configuración puede continuar sólo después de que el comando en el script env ha terminado.
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á inactivo por un tiempo, el script no se ejecuta).
START/B CMD env-script.bat
produce el mismo resultado. Ninguna de las banderas de CMD parece coincidir con mi factura.
fuente
Dos años, pero para completar ...
Enfoque estándar, en línea: (es decir, el comportamiento que obtendría al usarlo
&
en Linux)Notas: 1.
CALL
está emparejado con el archivo .bat porque es donde suele ir ... (es decir, esto es solo una extensión delCMD /C CALL "foo.bat"
formulario para que sea asincrónico. Por lo general, se requiere para obtener correctamente los 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 es más probable que ocurra).Si no quiere la salida:
Si desea que el bat se ejecute en una consola independiente: (es decir, otra ventana)
Si desea que la otra ventana permanezca después:
Nota: Esta es realmente 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 poner un
PAUSE
al final del archivo bat. O incluso aún, agregue^& PAUSE
después de la línea de comando:fuente
&
es un operador "y luego" (¿terminología?). (por ejemplo,cmd1 & cmd2
significa hacer "cmd1" y luego "cmd2". A diferencia del&&
operador, la ejecución de "cmd2" no depende de la salida exitosa de "cmd1"). El^
escape&
para entrar en los argumentos de CMD en lugar de ser consumido y ejecutado por la misma consola que ejecutó START.start
ycmd
no ofrecían la funcionalidad completa que buscaba. Tu respuesta lo clava.START /B "" CMD /C "foo.bat" [args [...]] ^>nul 2^>^&1
START /B "" CMD /C PING 127.0.0.1 >NUL
parece funcionar independientemente y no se produce nada. (Probablemente porqueCMD
heredaSTART
los identificadores de E / S). Supongo que la diferencia es si desea mantenerSTART
intacta la salida (error), lo que probablemente sea una buena idea.CALL
está ahí porque sentí que es una buena práctica para mantener. (es decir, no utilizandoCALL
para síncronos llamadas de murciélagos dará lugar a los códigos de salida impredecibles, así que constantemente el par llamadas de murciélagos conCALL
incluso cuando no se aplica estrictamente, como en este caso.)Dado que START es la única forma de ejecutar algo en segundo plano desde un script CMD, le recomendaría que lo siga usando. En lugar del modificador / B, intente / 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.
fuente
Término distinto al de primer plano o de fondo. Otra forma de ocultar la ventana en ejecución es a través de vbscript, si todavía está disponible en su sistema.
nombrarlo como sth.vbs y llamarlo desde bat, poner en una tarea programada, etc. Personalmente, deshabilitaré vbs sin prisa en cualquier sistema Windows que administre :)
fuente
Cree una nueva aplicación de Windows C # y llame a este método desde main:
fuente
Esto funciona en mi instalación de Windows XP Home, al modo Unix:
fuente
En realidad es bastante fácil con esta opción al final:
fuente
start
no tiene una-WindowStyle
opción.C:` instead of
C: \ Windows`) sugiere que encontró una herramienta en algún lugar de Internet y la copió en su disco duro.