Ejecute un archivo por lotes con el programador de tareas de Windows

155

Tengo un archivo por lotes daily.bat, este es el código:

cd C:\inetpub\wwwroot\infoweb\factuur\cron
c:\PHP\php.exe -f ./cron_pdf.php
ftp -s:ftp_upload.txt ftp.site.be

Y creé una tarea con el programador de tareas en Windows 7. Cuando ejecuto el lote manualmente, todo funciona bien, pero cuando trato de ejecutarlo con el programador de tareas no sucede nada.

Mi accion es

'run script' "C:\inetpub\wwwroot\site\x\cron\daily.bat"

UAC está apagado y yo soy administrador.

¿Alguna idea de por qué esto no funciona?

Rubén
fuente
No estoy seguro de si esta pregunta es fuera de tema, pero podría obtener mejores respuestas en serverfault.com para ello.
Hans Olsson
Gracias, también intentaré publicarlo en serverfault
Ruben
esto también puede ser útil: serverfault.com/questions/734035/…
Ruben

Respuestas:

286

Me enfrenté al mismo problema, pero encontré otra solución sin tener que modificar mi script por lotes.

Lo único que me perdí está en la configuración de 'Acción' - opción "Iniciar en (Opcional)".

Vaya a las propiedades de la tarea -> pestaña Acción -> Editar -> Rellene como se muestra a continuación:

  1. Acción : iniciar un programa
  2. Programa / secuencia de comandos : ruta a su secuencia de comandos por lotes, por ejemploC:\Users\beruk\bodo.bat
  3. Agregue argumentos (opcional) : <si es necesario, según su secuencia de comandos>
  4. Comenzar en (opcional) : coloque la ruta completa a su ubicación de secuencia de comandos por lotes, por ejemplo C:\Users\beruk\(no ponga comillas alrededor de Iniciar en)

Luego haga clic en Aceptar

Esto funciona para mi. ¡Buena suerte!

Ghazi
fuente
8
Sé que la publicación original es bastante antigua. Pero esta publicación se encontraba entre el enlace principal en la búsqueda de Google cuando intentaba la respuesta a este problema. Así que creo que me gustaría compartir los hallazgos. Por si acaso, cualquiera, incluido yo mismo, está olvidando esto.
Ghazi el
44
No creo que realmente necesite el valor 'Iniciar en (opcional)': puedo ejecutar un archivo .bat simple y autónomo sin él. Sin embargo, gracias por los pasos claros, ¡muy útil para aquellos que buscan un simple paseo!
DCaugs
23
@DCaugs, sin el Start Inconjunto de parámetros, mi archivo por lotes programado no se ejecutaría en absoluto. (Windows 7)
Justin Skiles
2
Esta solución no funcionó para mí. La respuesta proporcionada por @Arun Raja funcionó bien.
Cagy79
77
@DCaugs The Start ines la razón principal por la que funcionó para mí.
Gustavo
54

Ninguno de los métodos anteriores funcionó. Lo intenté de esta manera como lo dije en un tutorial y funcionó.

Acción:

Start a program 

Programa / script:

cmd

Añadir argumentos:

/c start "" "E:\Django-1.4.1\setup.bat"

Trabajó para mí en Win7 Pro. Debe tener una cuenta con una contraseña (las contraseñas en blanco no son buenas)

Arun Raja
fuente
1
¡Estoy de acuerdo! ninguna de las soluciones anteriores funcionó para mí en un Windows Server 2008. ¡Esta respuesta me funcionó! Gracias.
Cagy79
Desearía poder darte un +2000. He estado probando diferentes enfoques durante todo el día y nada funcionó bien, excepto su solución. Tuve que iniciar un archivo por lotes que a su vez lanza otro archivo por lotes 10 veces con diferentes parámetros. Desde la consola, todo funcionó bien, pero el Programador de tareas se negó a abrir más de 4 procesos al mismo tiempo. Fue extraño ... Con su técnica se lanzaron los 10 procesos.
Ícaro
Este método funcionó para mi. Pero, en el planificador, en la pestaña del historial, la tarea se completa inmediatamente con éxito, ya que la tarea es el cmd, pero no el archivo .bat que se inicia. Dado que el archivo bat, una operación de copia de seguridad, finaliza en 2-3 horas, no tengo idea de su estado.
azzurroverde
debe mantener una notificación por correo al final de la finalización del archivo bat para notificar su estado. Esa es una forma.
Arun Raja
Esto funcionó, junto con el consejo de que debería configurarse para ejecutarse en un directorio específico como se menciona en la respuesta aceptada de @Ghazi, asegurándose de que también se seleccione "ejecutar con los más altos privilegios".
mheavers
43

Para aquellos cuyos archivos bat todavía no funcionan en el Programador de tareas de Windows 8+, una cosa que me gustaría agregar a la respuesta de Ghazi, después de mucho sufrimiento:

1) En Acciones, elija "Crear tarea BÁSICA ", no "Crear tarea"

Eso lo hizo por mí, además de los otros temas que no hay que olvidar:

  1. Use la ruta de Inicio de su archivo por lotes, aunque diga opcional
  2. use comillas, si es necesario, en su Iniciar un programa> entrada de programa / script, es decir, "C: \ my scripts \ runme.bat" ...
  3. PERO NO use comillas en su campo Iniciar en. (¡Loco pero cierto!)

Esto funcionó sin necesidad de activar un símbolo del sistema.

(Lo siento, mi representante es demasiado bajo para agregar mi consejo de Tarea básica a los comentarios de Ghazi)

micstr
fuente
21

Asegúrese de que "Iniciar en" NO TIENE COTIZACIONES.

Jonathan
fuente
7

Está trabajando ahora. Esto es lo que hice. Probablemente no necesitará todos estos pasos para que funcione, pero solo para asegurarse de probarlos todos:

  • Verifique los parámetros de la cuenta de su tarea programada y asegúrese de que estén configurados para ejecutarse independientemente de que alguien haya iniciado sesión en la máquina

  • comprobar ejecutar con la mayoría de los privilegios / derechos

  • Asegúrese de ir primero a la ruta completa: cd C: \ inetpub \ wwwroot \ infoweb \ factuur \ cron

  • No use comillas dobles en sus archivos por lotes (no sé por qué pero parece ayudar)

  • Sea súper administrador, ingrese 'Administrador de usuario neto / activo: sí' en el símbolo del sistema, cierre la sesión e inicie sesión como súper administrador, por lo que UAC está apagado

Rubén
fuente
2
Lamento decirlo, pero esta es una respuesta muy mal escrita. Me aseguraría de que la respuesta correcta esté seleccionada como la respuesta aceptada.
jwize
5

Asegúrese de que "Iniciar en" NO termine con una RETROALIMENTACIÓN.

Michael Kehoe
fuente
1
¿Podría aclarar a qué versión del sistema operativo o tipo de tarea o a qué información es aplicable? La respuesta aceptada incluye un \ por lo que debe funcionar en algunos sistemas, ¿dónde no funciona?
lessthanideal
Esto solucionó una tarea programada 'foo.cmd' para mí en Windows Server 2012. Con 'Iniciar en' establecido en 'C: \ Foo \' la tarea falló con el error de código de salida 0x8007001, pero con 'Iniciar en' establecido en 'C : \ Foo 'la tarea funcionó bien.
Aaron
5

Tuve un problema en el que mi tarea no se disparaba simplemente porque se estaba ejecutando en una computadora portátil sin un cable de alimentación ... En la pestaña de condiciones, de forma predeterminada se verifica para que una tarea no se ejecute mientras la alimentación de CA no está conectada.

Chriz
fuente
3

Bajo Windows7 Pro, descubrí que la solución de Arun funcionó para mí: podía hacer que esto funcionara incluso con "ningún usuario conectado", elegí usar los privilegios más altos.

Según la experiencia anterior, debe tener una cuenta con una contraseña (las contraseñas en blanco no son buenas), y si el programa no le solicita la contraseña cuando termine el asistente, ¡vuelva y edite algo hasta que lo haga!

Este es el método en caso de que no esté claro qué funcionó

Action: start a program
Program/script : cmd
      (doesn't need the .exe bit!)
Add arguments:
    /c start "" "E:\Django-1.4.1\setup.bat" 
Bruce Metelerkamp
fuente
3

Me metí con esto durante varias horas y probé muchas sugerencias diferentes.

Finalmente lo puse a trabajar haciendo lo siguiente:

Acción: iniciar un programa

Programa / Script: C: \ scriptdir \ script.bat

Agregar argumentos (opcional) script.bat

Comience en (opcional): c: \ scriptdir

ejecutar solo cuando el usuario inició sesión

correr con los más altos privilegios

configurar para: Windows Vista, Windows Server 2008

Robb
fuente
2

Si todo el resto falla aquí, asegúrese de que el usuario que está intentando ejecutar la tarea tenga acceso al archivo que está tratando de usar.

En mi caso, estaba tratando de ejecutar un archivo por lotes desde C: \ Users \ Administrator \ Desktop al que la cuenta no podía acceder. Moverlo a una ubicación neutral en C: \ resolvió el problema.

Vince
fuente
1

Verifique qué cuenta de usuario utiliza para ejecutar nuestra tarea. Puede suceder que ejecute su tarea con un usuario diferente que su usuario predeterminado, y este usuario requiere algunos privilegios adicionales. También puede suceder que la tarea se ejecute, pero no puede ver ningún efecto porque el archivo por lotes espera alguna respuesta del usuario, así que verifique el administrador de tareas si ve que su proceso se está ejecutando. Una vez que sucede, programo un lote con svn update de alguna página web y el proceso se bloquea porque svn solicitó aceptar el certificado del servidor.

usuario6039542
fuente
1
  1. No use comillas dobles en su archivo cmd / batch
  2. Asegúrese de ir al inicio de la ruta completa en (opcional) :
    C: \ Archivo_necesario \ Reqular_task \ QDE \ cmd_practice \

ingrese la descripción de la imagen aquí

Shahidul Islam Molla
fuente
1

Publico la respuesta a esta pregunta aquí y aquí .

ingrese la descripción de la imagen aquí

Carbajal
fuente
Siempre y cuando esté seguro de que la otra respuesta es correcta, puede marcar la pregunta como duplicada.
Badro Niaimi
0

El uso del botón Ejecutar en la ventana principal del Programador de tareas para probar varias variaciones finalmente encontró la configuración correcta. Estas dos opciones deben combinarse: - Ejecutar solo cuando el usuario ha iniciado sesión - Ejecutar con los privilegios más altos. Todas las otras variaciones fallaron. Es exasperante todo el tiempo perdido en esto, pero al menos funciona. OS: VERSIÓN DE WINDOWS 8 CORE (BÁSICA)

sapitron
fuente
0

Intente ejecutar la tarea con altos privilegios.

ponga un \ al final de la ruta en "iniciar en carpeta" como c: \ temp \

No sé por qué, pero esto a veces me funciona.

C Jee
fuente
0

Acción: Start a Program

Programa / script: C:\Windows\System32\cmd.exe

Añadir argumentos: /k start "" "E:\scripts\example.bat"

Agregue exital final de su archivo por lotes.

La ventana cmd no se mostrará si selecciona Run whether user is logged in or not. Debe seleccionar Run only when user is logged onpara ver la ventana en acción.

Ethan Allen
fuente