Embora a resposta aceita para esta pergunta esteja correta, ela realmente não ajuda muito a explicar por que funciona, e como a sintaxe não está clara imediatamente, fiz um rápido google para descobrir o que realmente estava acontecendo. Na esperança de que essas informações sejam úteis para outras pessoas, estou postando aqui.
Redirecionando mensagens de erro do prompt de comando: STDERR / STDOUT
Sumário
Ao redirecionar a saída de um aplicativo usando o símbolo '>', as mensagens de erro ainda são impressas na tela. Isso ocorre porque as mensagens de erro geralmente são enviadas para o fluxo de erro padrão em vez do fluxo de saída padrão.
A saída de um aplicativo ou comando do console (prompt de comando) geralmente é enviada para dois fluxos separados. A saída regular é enviada para Saída Padrão (STDOUT) e as mensagens de erro são enviadas para Erro Padrão (STDERR). Ao redirecionar a saída do console usando o símbolo ">", você está redirecionando apenas o STDOUT. Para redirecionar o STDERR, você deve especificar '2>' para o símbolo de redirecionamento. Isso seleciona o segundo fluxo de saída que é STDERR.
Exemplo
O comando dir file.xxx
(onde file.xxx
não existe) exibirá a seguinte saída:
Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876
File Not Found
Se você redirecionar a saída para o NUL
dispositivo usando dir file.xxx > nul
, ainda verá a mensagem de erro como parte da saída, assim:
File Not Found
Para redirecionar (apenas) a mensagem de erro para NUL
, use o seguinte comando:
dir file.xxx 2> nul
Ou, você pode redirecionar a saída para um local e os erros para outro.
dir file.xxx > output.msg 2> output.err
Você pode imprimir os erros e a saída padrão em um único arquivo usando o comando "& 1" para redirecionar a saída de STDERR para STDOUT e enviando a saída de STDOUT para um arquivo:
dir file.xxx 1> output.msg 2>&1