Registrar una salida de archivo por lotes completa


11

Estoy usando un script de línea de comandos para ajustar múltiples configuraciones en una computadora. Sin embargo, me gustaría que toda la salida también se registre en un archivo .txt o .log.

Cuando uso mi conocimiento básico del sistema de registro, colocará la salida en un archivo pero en realidad no lo ejecutará. En mi caso, necesitaría ejecutarlo y luego iniciar sesión en un archivo para referencia posterior.

¿Alguien podría decirme cómo hacer esto?

¡Gracias por adelantado! Dempsey


¡Ni siquiera has especificado un sistema operativo!
Michael Hampton

Respuestas:


10

Si la pregunta solicita que se "ejecute" un script y que todo el archivo por lotes se envíe a un archivo de registro en Windows 8.1, entonces esta es la respuesta simple:

Incluya esto al comienzo de su archivo por lotes ...

@echo off
set LOGFILE=batch.log
call :LOG > %LOGFILE%
exit /B

:LOG
[ your script goes here ]

¡Excelente gracias! (Por supuesto,% LOGFILE% no es realmente necesario aquí: P)
Andrew

1
Mi guión plantea una pregunta: no lo veo si se usa. ¿Cómo registrar todo y verlo en la pantalla mientras se ejecuta?
Simon

Sí, ¿cómo harías eso para poder verlo mientras está en tu pantalla?
karl-police

3

En su pregunta, menciona:

"... colocará la salida en un archivo pero en realidad no la ejecutará. En mi caso, necesitaría que se ejecute y luego inicie sesión en un archivo para referencia posterior".

Como usted dice que el programa se está ejecutando y su salida se está colocando en el archivo, pensé que podría haber querido decir "mostrado" , en lugar de "ejecutado" .

Si eso no es lo que quisiste decir, entonces probablemente hubiera sido útil explicarlo mejor, tal vez con algún resultado de muestra.

En cualquier caso, estoy publicando esta respuesta en caso de que haya otros que consideren útil esta pregunta / respuesta.

Entonces, básicamente, parece que desea que la salida de una secuencia de comandos se capture en un archivo, y también poder ver la salida de la secuencia de comandos en la pantalla mientras se ejecuta la secuencia de comandos.

(tl; versión dr: use wintee , así:

script 2>&1 | wtee logfile.txt)


Para esta publicación, usaré un pequeño archivo por lotes de prueba, pero su script podría ser tan grande y complicado o tan simple como lo necesite:

C:\>type a.cmd
@echo off

echo Command: "dir /b a*"
dir /b a*
echo.

echo Command: "dir /b non-existant-file"
dir /b non-existant-file
echo.


Esto es lo que sucede cuando ejecuto este script por lotes:

C:\>a.cmd
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

Observe que en el script de prueba, la primera ejecución del comando "dir" es exitosa y la segunda falla. Hago esto solo para mostrar lo que sucederá con los "mensajes de error" cuando ejecute su script.

Si ejecuto el script y uso la redirección ( ">" ) para capturar la salida, veré esto

C:\>a.cmd > log.txt
File Not Found

C:\>type log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"

C:\>

Observe que el mensaje de error "Archivo no encontrado" se mostró en la pantalla cuando se ejecutó la secuencia de comandos, y en realidad no se capturó en el archivo. Esto se debe a que ">" captura la "salida normal" que se ha enviado a la secuencia STDOUT. Los "mensajes de error" se envían normalmente a la secuencia STDERR.

Para capturar "salida normal" y "mensajes de error", también debe capturar la secuencia STDERR, que se indica mediante el "2" en "2> & 1" en el comando aquí:

C:\>a.cmd > log.txt 2>&1
C:\>type log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

En unix, hay un comando estándar: "tee"

Usando el comando "tee", puede capturar la salida de un programa, y ​​también mostrar la salida en la pantalla, al mismo tiempo.

El comando "tee" no es estándar con Windows, pero puede descargar una versión gratuita de "tee" para Windows aquí: wintee . El programa descargado se llama: "wtee.exe".

Utiliza el programa "wtee.exe" como se muestra a continuación.

Esto capturará la salida del script en el archivo nombrado "log.txt"como antes, y también mostrará el resultado en la pantalla mientras se ejecuta el script:

C:\>a.cmd 2>&1 | wtee log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

C:\>type log.txt
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

0

Este script ejecutará ls y registrará su salida en un archivo llamado log.txt:

exec >log.txt 2>&1
ls

El registro no se ejecutará.


1
Tenga en cuenta que esto supone Unix / Linux, pero supongo que el OP habla sobre Windows. Tampoco está ejecutando un script, sino que registra la salida de los comandos que ingresas y omite la información crítica de cómo detener la locura ...
Sven

De hecho, estoy hablando de Windows. Gracias aunque :)
Dempsey FoxDie Van Assche
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.