Tengo una tarea programada que inicia un script por lotes que se ejecuta robocopy
cada hora. Cada vez que se ejecuta, aparece una ventana emergente en el escritorio con la salida de robocopy, que realmente no quiero ver.
Logré hacer que la ventana parezca minimizada haciendo que el trabajo programado se ejecute
cmd /c start /min mybat.bat
pero eso me da una nueva ventana de comando cada hora. Me sorprendió esto, dado cmd /c
"Ejecuta el comando especificado por una cadena y luego termina" - Debo haber entendido mal los documentos.
¿Hay alguna manera de ejecutar un script por lotes sin que aparezca una ventana cmd?
Respuestas:
En su lugar, puede ejecutarlo en silencio usando un archivo de Windows Script. El Método de ejecución le permite ejecutar un script en modo invisible. Crea un
.vbs
archivo como estey programarlo El segundo argumento en este ejemplo establece el estilo de la ventana. 0 significa "ocultar la ventana".
Sintaxis completa del método Run :
Argumentos:
fuente
¿Estás ejecutando esto como una tarea programada? Si es así, configúrelo para que se ejecute como una cuenta de usuario diferente, entonces no será visible para el usuario conectado. Si el script no necesita acceso de red a elementos que necesitan autenticación de Windows (como archivos compartidos o impresoras), puede ejecutarlo como "nt Authority \ system" y dejar la contraseña en blanco. En Windows 7, simplemente configure el usuario en SISTEMA y presione OK.
(Probablemente tengas que usar un usuario real si estás usando robocopy ...)
JR
fuente
Simplemente configure la tarea programada como "Ejecutar si el usuario ha iniciado sesión o no".
fuente
También puedes probar CHP (Crear proceso oculto) , hace exactamente lo que piensas ...
Se ejecuta sin ventana de comandos. ¡Perfecto! Hecho por las mismas personas que CMDOW, pero esto es más apropiado.
fuente
CMDOW es una herramienta impresionante que le permite hacer muchas, muchas cosas a las ventanas desde la línea de comandos.
Una de las cosas más simples es ocultar la ventana actual (generalmente como una primera línea en el archivo bat) con:
o comenzar un nuevo proceso oculto con
fuente
Intenta invocar el script con
fuente
start
no es un programa, es un comando. Debe especificarcmd
como programa para ejecutar y/c start /b <file>
como argumento. Sin embargo, esto todavía no va a funcionar porque seguirá creando una ventana de consolacmd
y mostrará una ventana negra en la pantalla.Puede crear un acceso directo al archivo por lotes, configurar el acceso directo para que comience a minimizarse (en las propiedades del acceso directo, pestaña 'Acceso directo') y luego configurar el trabajo para iniciar el acceso directo.
Importante : Deberá especificar la ruta del acceso directo manualmente escribiéndolo en el campo Ejecutar texto, completo con la extensión '.lnk'; si sólo intenta explorar a ella, será amablemente redirigir sí a cualesquiera de los puntos de acceso directo a.
fuente
Me doy cuenta de que esta pregunta ya ha sido respondida con una resolución perfectamente buena que es nativa de Windows y, por lo tanto, debería ser la más compatible, y estoy completamente de acuerdo.
También quería decir que no estoy de acuerdo con el comentario de @ splattne (pero no con su respuesta real), que la resolución en el otro hilo de referencia merece el crédito. Esa respuesta implica ejecutar el script como un usuario diferente (SYSTEM), que es más o menos el equivalente a darle acceso al script root. También fallará para trabajos como
ROBOCOPY
(como lo menciona John Rennie), que requieren acceso a la red.Nunca lo he intentado
CMDOW
antes, pero me gustaría ofrecer otra resolución similar, que [aunque no está instalada de forma nativa en Windows] sigue siendo altamente portátil para la mayoría de las versiones, y viene en versiones de 32 y 64 bits, y eso es NirCmd .NirCmd es una herramienta muy poderosa que tiene miles de opciones, la más útil de las cuales, personalmente, considero que es su capacidad para iniciar ventanas de comandos ocultas simplemente ejecutando lo siguiente:
Desde la
exec
sección de la referencia NirCmd comando :Ejecuta una aplicación y, opcionalmente, especifica uno o más parámetros de línea de comandos para la aplicación ejecutada. El parámetro [show / hide / min / max] especifica si la aplicación en ejecución será visible o no. Si se especifica 'ocultar', la aplicación en ejecución no será visible para el usuario. Si se especifica 'max', la ventana de la aplicación en ejecución se maximizará. Si se especifica 'min', la ventana de la aplicación en ejecución se minimizará.
EDITAR: estaba tratando de ejecutar un
ROBOCOPY
trabajo y probé el método en esta respuesta, y no funcionó, incluso después de editar los privilegios de acceso a la red. Intenté hacer doble clic en el script y no pude hacerlo funcionar, pero solo pude ejecutarlo bajo un símbolo del sistema elevado. Creé un acceso directo al archivo por lotes y lo ejecuté como Administrador y pude ejecutarlo haciendo doble clic en él, pero el método con el que terminé fue ejecutarlo oculto como SYSTEM (Lo sé, lo sé) - pero funcionaROBOCOPY
, por lo que vale, siempre que el archivo por lotes tenga los permisos correctos.EDITAR 2: por alguna razón, no funcionaría como SYSTEM (probablemente el elemento de acceso a la red al que se hizo referencia anteriormente): solo noté esto después de ejecutar realmente
ROBOCOPY
sin el indicador / L, que es básicamente una simulación y [aparentemente] no en realidad me conecto al sistema remoto, pero cuando ejecuto el archivo por lotes con los privilegios más altos y verifico la casilla oculta, todavía puedo ejecutarlo como el usuario conectado en segundo plano sin que se muestre una ventana de comandos, para lo que sea que valga para cualquiera .fuente
Otra solución que he usado es Hidden Start
fuente
Intente poner un comando de salida al final de su archivo por lotes. Esto debería cerrar la ventana de comandos cuando se completa el script.
fuente
Para ocultar la salida (aunque no la ventana), agregue esto al comienzo de su archivo por lotes:
fuente