Uno dei modi più utili per registrare e risolvere i problemi del comportamento dei comandi o dei processi batch che si eseguono su Windows è quello di reindirizzare l’output a un file.
Tuttavia, ci sono alcuni modi diversi in cui è possibile reindirizzare la scrittura della riga di comando a un file. L’opzione che scegli dipende da come vuoi visualizzare il tuo output di comando.
Come funziona l’output del prompt dei comandi di Windows
Quando digiti un comando nella console di Windows (prompt dei comandi), l’output di quel comando va in due flussi separati.
- STDOUT: Standard Out è dove vanno le risposte standard dei comandi. Per esempio la risposta standard per il comando DIR è una lista di file all’interno di una directory.
- STDERR: Standard Error è dove va qualsiasi messaggio di errore se c’è un problema con il comando. Per esempio, se non ci sono file nella directory, il comando DIR invierà “File Not Found” al flusso di Errore Standard.
Puoi reindirizzare l’output a un file in Windows per entrambi questi flussi di output.
Redirect Standard Output Write to New File
Ci sono due modi per reindirizzare lo standard output di un comando a un file. Il primo è quello di inviare la scrittura dell’output del comando a un nuovo file ogni volta che esegui il comando.
Per fare questo, apri il prompt dei comandi e digita:
dir test.exe > myoutput.txt
Il carattere > dice alla console di inviare l’output STDOUT al file con il nome che hai fornito.
Quando esegui questo comando, noterai che non c’è nessuna risposta nella finestra di comando tranne l’errore che il file non esiste.
Questo perché lo standard output del comando è stato reindirizzato a un file chiamato myoutput.txt. Il file ora esiste nella stessa directory dove hai eseguito il comando. L’output standard di errore viene ancora visualizzato come fa normalmente.
Nota: Fate attenzione a cambiare la directory attiva per il prompt dei comandi prima di eseguire il comando. In questo modo saprai dove sono memorizzati i file di output.
Puoi visualizzare lo standard output che è andato al file digitando “myoutput.txt” nella finestra di comando. Questo aprirà il file di testo nel vostro visualizzatore di file di testo predefinito. Per la maggior parte delle persone, questo è di solito Notepad.exe.
La prossima volta che si esegue lo stesso comando, il file di output precedente verrà cancellato. Un nuovo file di output verrà ricreato con l’output dell’ultimo comando.
Ridurre l’output standard scrive sullo stesso file
E se non vuoi sovrascrivere lo stesso file? Un’altra opzione è usare >> piuttosto che > per reindirizzare a un file di output. Nel caso di questo esempio, dovresti digitare:
dir test.exe >> myoutput.txt
Vedrai lo stesso output (solo l’errore).
Ma in questo caso, invece di sovrascrivere il file di output, questo comando aggiunge il nuovo output al file di output esistente.
Ogni volta che si esegue un comando e si aggiunge l’output a un file, il nuovo output standard verrà scritto alla fine del file esistente.
Ridirigere l’errore standard su un file
Lo stesso modo in cui puoi reindirizzare l’output standard scrive su un file, puoi anche emettere il flusso di errore standard su un file.
Per fare questo, dovrai aggiungere 2> alla fine del comando, seguito dal file di errore in uscita che vuoi creare.
In questo esempio, digiterai il comando:
dir test.exe > myoutput.txt 2> output.err
Questo invia il flusso di output standard a myoutput.txt, e il flusso di errore standard a output.err. Il risultato è che nessun flusso di output viene visualizzato nella finestra della console.
Tuttavia, puoi vedere i messaggi di errore digitando output.err. Questo aprirà il file nel vostro visualizzatore di file di testo predefinito.
Come potete vedere, qualsiasi messaggio di errore dal comando viene inviato al file di errore. Proprio come con l’output standard, puoi usare >> invece per aggiungere l’errore agli errori dei comandi eseguiti in precedenza.
Ridurre tutte le scritture di output ad uno stesso file
Tutti gli approcci precedenti risultano in più file. Un file è per il flusso di output standard e l’altro è per il flusso di errore standard.
Se vuoi includere entrambi questi output nello stesso file, puoi fare anche questo. Per farlo, devi solo reindirizzare tutto l’output allo stesso file usando il seguente comando.
dir test.exe 1> myoutput.txt 2>&1
Ecco come funziona questo comando:
- L’output standard è diretto al file di output identificato dal numero di output 1.
- L’output di errore standard identificato dal numero 2 viene reindirizzato al file di output identificato dal numero 1.
Questo aggiungerà l’output di errore alla fine dell’output standard.
Questo è un modo utile per vedere tutto l’output di qualsiasi comando in un unico file.
Silencing Standard o Error Output Streams
Puoi anche spegnere lo Standard Output o lo Standard Error reindirizzando l’output a un NUL invece che a un file.
Utilizzando l’esempio precedente, se vuoi solo lo Standard Output e nessun Standard Error, puoi usare il seguente comando:
dir test.exe 1> myoutput.txt 2>nul
Questo produrrà lo stesso file di output del primo esempio precedente dove hai reindirizzato solo lo Standard Output, ma con questo comando l’errore non farà eco nella console. Non creerà nemmeno un file di log degli errori.
Questo è utile se non ti interessa alcun errore e non vuoi che diventi una seccatura.
Puoi eseguire uno qualsiasi degli stessi comandi di output di cui sopra dall’interno di un file BAT e l’output di quella linea andrà al file di output specificato. Questo è un modo utile per vedere se qualche comando all’interno di un file BAT ha avuto degli errori quando ha cercato di essere eseguito.