Registra un intero output di file batch


11

Sto usando uno script da riga di comando per regolare più impostazioni su un computer. Tuttavia, vorrei che l'intero output fosse registrato anche in un file .txt o .log.

Quando utilizzo la mia conoscenza di base del sistema di registrazione, inserisce l'output in un file ma non lo eseguo effettivamente. Nel mio caso avrei bisogno che fosse eseguito e quindi registrato in un file per riferimento futuro.

Qualcuno sarebbe in grado di dirmi come fare?

Grazie in anticipo! Dempsey


Non hai nemmeno specificato un sistema operativo!
Michael Hampton,

Risposte:


10

Se la domanda richiede che uno script venga "eseguito" e l'intero file batch venga emesso in un file di registro in Windows 8.1, ecco la semplice risposta:

Includilo all'inizio del tuo file batch ...

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

:LOG
[ your script goes here ]

Eccellente grazie! (Naturalmente,% LOGFILE% non è davvero necessario qui.: P)
Andrew,

1
La mia sceneggiatura pone una domanda: non la vedo se questa viene utilizzata. Come registrare tutto e vederlo sullo schermo durante l'esecuzione?
Simon,

Sì, come lo faresti in modo da poterlo vedere mentre è sullo schermo?
karl-police

3

Nella tua domanda, menzioni:

"... inserirà l'output in un file ma in realtà non lo eseguirà. Nel mio caso avrei bisogno che venga eseguito e quindi registrato in un file per riferimento futuro."

Dato che dici che il programma è in esecuzione e il suo output viene inserito nel file, ho pensato che avresti potuto significare "visualizzato" , anziché "eseguito" .

Se questo non fosse ciò che intendevi, probabilmente sarebbe stato d'aiuto se ciò fosse spiegato meglio, forse con qualche output di esempio.

In ogni caso, sto pubblicando questa risposta nel caso in cui altri trovino utile questa domanda / risposta.

Quindi, fondamentalmente, sembra che tu voglia catturare l'output di uno script in un file e poter anche vedere l'output dello script sullo schermo mentre lo script è in esecuzione.

(tl; versione dr: usa wintee , in questo modo:

script 2>&1 | wtee logfile.txt)


Per questo post, userò un piccolo file batch di test, ma il tuo script potrebbe essere grande e complicato o semplice quanto ti serve:

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.


Questo è ciò che accade quando eseguo questo script batch:

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

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

Si noti che nello script di test la prima esecuzione del comando "dir" ha esito positivo e la seconda ha esito negativo. Faccio questo solo per mostrare cosa accadrà con i "messaggi di errore" quando esegui il tuo script.

Se eseguo lo script e utilizzo il reindirizzamento ( ">" ) per acquisire l'output, vedrò questo

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

Si noti che il messaggio di errore "File non trovato" è stato visualizzato sullo schermo quando è stato eseguito lo script e non è stato effettivamente acquisito nel file. Questo perché ">" acquisisce "output normale" che è stato inviato al flusso STDOUT. I "messaggi di errore" vengono normalmente inviati al flusso STDERR.

Per acquisire "output normale" e "messaggi di errore", è necessario acquisire anche il flusso STDERR, indicato da "2" in "2> & 1" nel comando qui:

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

In unix, esiste un comando standard: "tee"

Usando il comando "tee", puoi catturare l'output da un programma e anche visualizzare l'output sullo schermo, allo stesso tempo.

Il comando "tee" non è standard con Windows, ma puoi scaricare una versione gratuita di "tee" per Windows qui: wintee . Il programma scaricato si chiama: "wtee.exe".

Si utilizza il programma "wtee.exe" come mostrato di seguito.

Questo acquisirà l'output dello script nel file denominato "log.txt"come in precedenza e visualizzerà l'output sullo schermo mentre lo script è in esecuzione:

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

Questo script eseguirà ls e registrerà il suo output in un file chiamato log.txt:

exec >log.txt 2>&1
ls

Il registro non verrà eseguito.


1
Si noti che ciò presuppone Unix / Linux, ma la mia ipotesi è che OP parli di Windows. Inoltre non esegue uno script, ma registra l'output dei comandi immessi e omette le informazioni critiche su come fermare la follia ...
Sven

Sto davvero parlando di Windows. Grazie comunque :)
Dempsey FoxDie Van Assche il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.