programacion por off lotes lista lenguaje ejemplos comandos batch bat avanzados avanzada archivos batch-file scheduled-tasks capture

batch-file - por - lista de comandos batch



¿Cómo capturo el resultado de un script si el planificador de tareas lo está ejecutando? (7)

Con Windows Server 2008, ¿cómo hago para capturar el resultado de un script que se ejecuta con el programador de tareas de Windows?

Estoy probando una secuencia de comandos de lotes de impresión personalizada bastante larga, y con fines de depuración, me gustaría ver todos los resultados cada noche.


Pruebe cmd / c y sello de tiempo personalizado

Para construir sobre las respuestas de otros aquí, es posible que el archivo de salida que desea crear tenga la fecha u hora incorporada en el nombre del archivo de salida. Con CMD.exe esto se puede lograr de la siguiente manera. Tenga en cuenta que esta técnica toma la salida de cadena de las variables de entorno internas de Windows y las corta en función de la posición del carácter, por lo que puede no ser correcto para la región de Windows que utiliza. Esta técnica se limita a tratar con una sola región de Windows. Por ejemplo, lo que funciona para EE. UU. Podría fallar para el Reino Unido, debido a las diferencias en el formato de la fecha y / o hora para cada región. PowerShell es más poderoso ya que puede tratar con diferentes regiones de Windows, y PowerShell puede invocar CMD.exe para ejecutar archivos .cmd , pero eso está fuera del alcance de esta respuesta.

Usando CMD.EXE

Puede acceder a diferentes componentes de la fecha y la hora cortando las variables de entorno interno %date% y %time% , de la siguiente manera (una vez más, los valores de corte exactos dependen de la región configurada en Windows):

  • Año: %date:~10,4%
  • Mes: %date:~4,2%
  • Día: %date:~7,2%
  • Hora: %time:~0,2%
  • Minuto: %time:~3,2%
  • Segundo: %time:~6,2%

Supongamos que quiere que su archivo de registro se llame " Log_[yyyyMMdd]_[hhmmss].txt ", usaría lo siguiente:

Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt

Para probar esto, ejecute la siguiente línea de comando:

cmd /c echo Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt

Poniéndolo todo junto, para redirigir stdout y stderr desde su secuencia de comandos a un archivo de registro nombrado con la fecha y hora actual, use lo siguiente como su línea de comando:

cmd /c YourProgram.cmd > Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt 2>&1

EDITAR: Precaución: ¡La marca de tiempo puede contener espacio en blanco!

Como @ user25064 ha señalado, algunas veces antes del mediodía puede aparecer con un espacio principal en la porción de la hora del tiempo. Por lo tanto, el nombre del archivo debe estar entre comillas para evitar que el espacio interrumpa el procesador de comandos de la siguiente manera:

cmd /c YourProgram.cmd > "Log_%date:~10,4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt" 2>&1


Con stderr (a donde van la mayoría de los errores):

cmd /c yourscript.cmd > logall.txt 2>&1


Para complementar la respuesta de @ user2744787, aquí hay una captura de pantalla para mostrar cómo usar cmd con argumentos en una tarea programada:


Pruebe esto como la cadena de comando en el Programador de tareas:

cmd /c yourscript.cmd > logall.txt


Puede escribir en un archivo de registro en las líneas que desea generar de esta manera:

@echo off echo Debugging started >C:/logfile.txt echo More stuff echo Debugging stuff >>C:/logfile.txt echo Hope this helps! >>C:/logfile.txt

De esta forma, puede elegir qué comandos emitir si no desea rastrear todo, solo obtenga lo que necesita ver. El > enviará al archivo especificado (creando el archivo si no existe y sobrescribiéndolo si lo hace). >> agregará al archivo especificado (creando el archivo si no existe pero añadiendo los contenidos si lo hace).


Puede tener un debug.cmd que llame a yourscript.cmd

yourscript.cmd > logall.txt

planifica debug.cmd en lugar de yourscript.cmd


>> anexará el archivo de registro, en lugar de sobrescribirlo cada vez. Los 2>&1 también enviarán errores a su archivo de registro.

cmd /c YourProgram.exe >> log.txt 2>&1