Sé que ya he respondido una pregunta similar ( Ejecutar archivo por lotes en segundo plano cuando se inicia Windows ), pero esta vez necesito iniciar un lote:
- de otro lote
- sin ninguna ventana de consola mostrada,
- con todos los argumentos pasados al lote invisible.
El primer lote se ejecuta en una ventana de consola. Sin embargo, no quiero que el segundo lote (lanzado por el primero de forma asincrónica ) también muestre una ventana de consola.
Se me ocurrió una secuencia de comandos VBScript que hace exactamente eso, y puse la secuencia de comandos como respuesta para que otros la consulten , pero si tiene otras ideas / soluciones, no dude en contribuir.
Nota: La ventana de la consola del procesador de comandos de Windows es nombrada como la ventana de DOS no correcta por muchas personas.
Gracias a todos por las respuestas. Por lo que entiendo, si necesito llamar asíncronamente a un script para que se ejecute en modo invisible:
- De un segundo script que ya está en una ventana de consola,
start /b
es suficiente. - Desde Windows, sin activar una segunda ventana , mi solución sigue siendo válida.
fuente
Respuestas:
¿Necesita que el segundo archivo por lotes se ejecute de forma asincrónica? Por lo general, un archivo por lotes ejecuta otro sincrónicamente con el
call
comando, y el segundo compartiría la ventana del primero.Usted puede utilizar
start /b
second.bat para poner en marcha un segundo archivo por lotes de una forma sincronizada desde su primera ventana que las acciones de su primera. Si ambos archivos por lotes escriben en la consola simultáneamente, la salida se superpondrá y probablemente sea indescifrable. Además, querrás poner unexit
comando al final de tu segundo archivo por lotes, o estarás dentro de un segundocmd
shell una vez que todo esté hecho.fuente
Aquí hay una posible solución:
Desde su primer script, llame a su segundo script con la siguiente línea:
En realidad, estás llamando a un script vbs con:
%*
)Luego, invis.vbs llamará a su script con el método Windows Script Host Run () , que toma:
Aquí está invis.vbs:
fuente
Convierta el archivo por lotes a un exe. Pruebe Bat To Exe Converter o Online Bat To Exe Converter , y elija la opción para ejecutarlo como una aplicación fantasma, es decir, sin ventana.
fuente
Creo que esta es la solución más fácil y más corta para ejecutar un archivo por lotes sin abrir la ventana de DOS, puede ser muy molesto cuando desea programar un conjunto de comandos para que se ejecute periódicamente, por lo que la ventana de DOS sigue apareciendo, aquí está su solución . Use una secuencia de comandos VBS para llamar al archivo por lotes ...
Copie las líneas anteriores a un editor y guarde el archivo con la extensión .VBS. Edite el nombre de archivo .BAT y la ruta en consecuencia.
fuente
Set WshShell = Nothing
, funcionó bien para mí y puede tener una forma aún más pequeña de hacerlo.Aquí está mi colección de formas de lograr eso, y aún más, donde fue posible. Intenté devolver también el PID del proceso iniciado (todos los scripts vinculados se pueden descargar y guardar con el nombre que considere conveniente):
1) La solución IEXPRESS se puede utilizar incluso en máquinas antiguas win 95/98. Iexpress es una herramienta realmente antigua que todavía está empaquetada con Windows, ya que los argumentos solo aceptan el comando y sus argumentos.
Ejemplo de uso:
2) SCHTASKS : nuevamente acepta solo dos argumentos: el comando y los argumentos. También verifica si se inició con permisos elevados y, si es posible, obtiene el PID del proceso con WEVTUTIL (disponible desde Vista y superior para que la versión más nueva de Windows reciba el PID).
Ejemplo de uso:
3) 'WScript.Shell' : el script es un contenedor completo de 'WScript.Shell' y todas las opciones posibles se pueden configurar a través de las opciones de la línea de comandos. Es un híbrido jscript / batch y se puede llamar como un murciélago.
Ejemplo de uso (para más información imprima la ayuda con '-h'):
4) 'Win32_ProcessStartup' : nuevamente el contenedor completo y todas las opciones son accesibles a través de los argumentos de la línea de comando. Esta vez es WSF / híbrido por lotes con algunos códigos Jscript y VBScript, pero devuelve el PID del proceso iniciado. Si el proceso es no ocultas, se pueden usar algunas opciones como las coordenadas X / Y (no aplicable para todos los ejecutables, pero por ejemplo cmd.exe acepta coordenadas).
Ejemplo de uso (para más información imprima la ayuda con '-h'):
5) El. Solución neta . Se utilizan la mayoría de las opciones de ProcessStartInfo (pero al final estaba demasiado cansado para incluir todo):
Ejemplo de uso (para más información imprima la ayuda con '-h'):
fuente
En la otra pregunta sugerí autoexnt . Eso también es posible en esta situación. Simplemente configure el servicio para que se ejecute manualmente (es decir, no automático al inicio). Cuando desee ejecutar su lote, modifique el archivo autoexnt.bat para llamar al archivo por lotes que desee e inicie el servicio autoexnt.
El archivo por lotes para iniciar esto puede verse así (sin probar):
Tenga en cuenta que los archivos por lotes iniciados de esta manera se ejecutan como el usuario del sistema, lo que significa que no tiene acceso a los recursos compartidos de red automáticamente. Pero puede usar el uso neto para conectarse a un servidor remoto.
Debe descargar el Kit de recursos de Windows 2003 para obtenerlo. El Kit de recursos también se puede instalar en otras versiones de Windows, como Windows XP.
fuente
Ejecútelo con un nombre de usuario diferente, utilizando "runas" o programándolo con un usuario diferente en Tareas programadas de Windows.
fuente
Puede ejecutar su archivo .bat a través de un archivo .vbs
Copie el siguiente código en su archivo .vbs:
fuente
También puedes usar
PD: Desafortunadamente, el estado de ventana minimizado depende del comando que se ejecute. VG no funciona
fuente