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
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