158 votos

Ejecutar un archivo .bat en una tarea programada sin ventana

Tengo una tarea programada que inicia un lote script que se ejecuta robocopy cada hora. Cada vez que se ejecuta aparece una ventana en el escritorio con la salida de robocopy, que realmente no quiero ver.

He conseguido que la ventana aparezca minimizada haciendo que el trabajo programado se ejecute

cmd /c start /min mybat.bat

pero eso me da una nueva ventana de comandos cada hora. Me sorprendió esto, dado que cmd /c "Lleva a cabo el comando especificado por la cadena y luego termina" - Debo haber entendido mal la documentación.

¿Hay alguna manera de ejecutar un lote script sin que aparezca una ventana cmd?

0 votos

Me parece que esta es una respuesta más preferible stackoverflow.com/questions/6568736/

156voto

Bob Puntos 34449

En su lugar, puede ejecutarlo de forma silenciosa utilizando un archivo script de Windows. El método de ejecución le permite ejecutar un script en modo invisible. Crear un .vbs archivo como este

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing

y programarlo. El segundo argumento en este ejemplo establece el estilo de la ventana. 0 significa "ocultar la ventana".

Sintaxis completa del Método de ejecución :

 object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

Argumentos:

  • objeto: Objeto WshShell.
  • strCommand: Valor de cadena que indica la línea de comandos que se quiere ejecutar. Debe incluir cualquier parámetro que quiera pasar al archivo ejecutable.
  • intWindowStyle: Opcional. Valor entero que indica la apariencia de la ventana del programa. Tenga en cuenta que no todos los programas hacen uso de esta información.
  • bWaitOnReturn: Opcional. Valor booleano que indica si el script debe esperar a que el programa termine de ejecutarse antes de continuar con la siguiente sentencia de su script. Si se establece en true, la ejecución de script se detiene hasta que el programa termine, y Run devuelve cualquier código de error devuelto por el programa. Si se establece en false (el valor predeterminado), el método Run regresa inmediatamente después de iniciar el programa, devolviendo automáticamente 0 (que no debe interpretarse como un código de error).

0 votos

+1, acaba de escribir exactamente lo mismo

0 votos

Lo vi antes de que lo borraras. Supongo que los dos somos bots ;-)

0 votos

Estaba a punto de escribir que te mereces convertirte en el Jon Skeet de serverfault... luego me di cuenta de que ya lo has hecho :-)

63voto

John Rennie Puntos 6821

¿Está ejecutando esto como una tarea programada? Si es así, configúrala para que se ejecute como una cuenta de usuario diferente y así no será visible para el usuario que ha iniciado la sesión. 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, sólo hay que poner el usuario como SYSTEM, y pulsar OK.

(Aunque probablemente tengas que utilizar un usuario real si utilizas robocopy...)

JR

3 votos

Gracias - esto me resultó menos molesto que la opción .vbs.

0 votos

Me gusta la idea, pero soy el único usuario en este escritorio, y es un PC de trabajo por lo que no puede crear otros. Cuando selecciono cualquier otra cosa en la casilla "Ejecutar como", me pide una contraseña y una confirmación, de las cuales la mía falla.

8 votos

Puse el usuario "Ejecutar como" a SYSTEM (que luego cambió a NT AUTHORITY) \SYSTEM ) y me ha funcionado. Ya no veo la ventana emergente de CMD cuando se ejecuta mi tarea programada. Gracias.

38voto

Peter Meinl Puntos 161

Simplemente configure la tarea programada como "Ejecutar si el usuario está conectado o no".

9 votos

Perfecto. ¡Incluso puedes desactivar el almacenamiento de credenciales y entonces esto termina siendo más seguro que tener el SISTEMA ejecutándolo!

1 votos

Tenga en cuenta que para ello es necesario contar con los derechos de "Inicio de sesión como trabajo por lotes", ya que las cuentas de usuario normales no tienen este permiso.

19voto

rocketmonkeys Puntos 258

También puedes probar CHP (Crear proceso oculto) ...hace exactamente lo que uno piensa...

CHP.EXE mybat.bat

Se ejecuta sin ventana de comandos. Perfecto. Hecho por la misma gente que CMDOW, pero esto es más apropiado.

0 votos

Funciona perfectamente cuando se necesita ejecutar la tarea en el contexto del usuario conectado ("Trigger: on connect to user session", "Run task as: Users")

2 votos

Esto no es una herramienta incorporada

0 votos

Es curioso, FortiNet lo clasifica como un "hiddenware" dañino. Probablemente sea una alerta falsa.

10voto

seanyboy Puntos 3170

¿Estás seguro de que el portátil merece la pena la inversión? Dado que una unidad SSD "barata" a menudo no es mucho mejor que un disco duro normal (aunque esto sólo puede ser cierto para los ordenadores de sobremesa) y estás seguro de que tu disco duro es el cuello de botella del rendimiento?

4 votos

Tanto esta sugerencia como la de Rocketmonkeys implican la descarga de nuevas herramientas, lo que supone una mayor compatibilidad en los escritorios de varias personas. El uso de comandos de Windows es mucho mejor.

0 votos

Además cmdow es detectado como "peligroso" por algunos programas antivirus (es no peligroso, pero la propia detección puede causar algunos problemas si el archivo cmdow está en cuarentena...).

3 votos

Sigue habiendo consola emergente, sólo que parpadea muy rápido.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: