Mentre la risposta accettata a questa domanda è corretta, in realtà non fa molto per spiegare perché funziona e, poiché la sintassi non è immediatamente chiara, ho fatto un rapido google per scoprire cosa stesse realmente accadendo. Nella speranza che queste informazioni siano utili agli altri, le sto pubblicando qui.
Reindirizzamento dei messaggi di errore dal prompt dei comandi: STDERR / STDOUT
Sommario
Quando si reindirizza l'output da un'applicazione utilizzando il simbolo '>', i messaggi di errore continuano a essere stampati sullo schermo. Questo perché i messaggi di errore vengono spesso inviati al flusso di errore standard anziché al flusso di uscita standard.
L'output da un'applicazione o un comando della console (prompt dei comandi) viene spesso inviato a due flussi separati. L'uscita normale viene inviata a Uscita standard (STDOUT) e i messaggi di errore vengono inviati a Errore standard (STDERR). Quando si reindirizza l'output della console utilizzando il simbolo ">", si reindirizza solo STDOUT. Per reindirizzare STDERR devi specificare '2>' per il simbolo di reindirizzamento. Questo seleziona il secondo flusso di output che è STDERR.
Esempio
Il comando dir file.xxx
(dove file.xxx
non esiste) visualizzerà il seguente output:
Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876
File Not Found
Se reindirizzi l'output al NUL
dispositivo utilizzando dir file.xxx > nul
, vedrai comunque la parte del messaggio di errore dell'output, in questo modo:
File Not Found
Per reindirizzare (solo) il messaggio di errore a NUL
, utilizzare il seguente comando:
dir file.xxx 2> nul
In alternativa, è possibile reindirizzare l'output in una posizione e gli errori in un'altra.
dir file.xxx > output.msg 2> output.err
È possibile stampare gli errori e l'output standard su un singolo file utilizzando il comando "& 1" per reindirizzare l'output di STDERR su STDOUT e quindi inviare l'output da STDOUT a un file:
dir file.xxx 1> output.msg 2>&1