Uma das maneiras mais úteis de registrar e solucionar o comportamento dos comandos ou trabalhos em lote que você executa no Windows é redirecionar a saída para um arquivo.
No entanto, existem algumas maneiras diferentes de redirecionar a linha de comando para um arquivo. A opção que você escolher depende de como você quer ver a saída do seu comando.
Como funciona a saída de comandos do Windows
Quando você digita um comando no console do Windows (prompt de comando), a saída desse comando vai para dois streams separados.
- STDOUT: Standard Out é para onde vai qualquer resposta padrão dos comandos. Por exemplo, a resposta padrão para o comando DIR é uma lista de arquivos dentro de um diretório.
- STDERR: Standard Error é para onde qualquer mensagem de erro vai se houver um problema com o comando. Por exemplo, se não houver nenhum ficheiro no directório, o comando DIR irá sair “File Not Found” para o fluxo de erro padrão.
Pode redireccionar a saída para um ficheiro no Windows para ambos os fluxos de saída.
Redirect Standard Output Write to New File
Existem duas formas de redireccionar a saída padrão de um comando para um ficheiro. A primeira é enviar o comando de saída de escrita para um novo ficheiro sempre que executar o comando.
Para fazer isto, abra o prompt de comando e digite:
dir test.exe > myoutput.txt
O caractere > diz ao console para sair STDOUT para o ficheiro com o nome que você forneceu.
Quando você executar este comando, você notará que não há nenhuma resposta na janela de comando exceto o erro de que o arquivo não existe.
Isto porque a saída padrão para o comando foi redirecionada para um arquivo chamado myoutput.txt. O arquivo agora existe no mesmo diretório onde você executou o comando. A saída de erro padrão ainda aparece como normalmente aparece.
Note: Tenha cuidado para mudar o diretório ativo para o prompt de comando antes de executar o comando. Desta forma você saberá onde os arquivos de saída são armazenados.
Você pode ver a saída padrão que foi para o arquivo digitando “myoutput.txt” na janela de comando. Isto irá abrir o ficheiro de texto no seu visualizador de ficheiros de texto por defeito. Para a maioria das pessoas, este é normalmente o Notepad.exe.
Da próxima vez que executar o mesmo comando, o ficheiro de saída anterior será apagado. Um novo ficheiro de saída será recriado com a saída do último comando.
Redirect Standard Output Writes to the Same File
E se não quiser sobrescrever o mesmo ficheiro? Outra opção é usar >> em vez de > para redireccionar para um ficheiro de saída. No caso deste exemplo, você digitaria:
dir test.exe >> myoutput.txt
Você verá a mesma saída (apenas o erro).
Mas neste caso, em vez de sobrescrever o arquivo de saída, este comando anexa a nova saída ao arquivo de saída existente.
A cada vez que executar um comando e anexar a saída a um ficheiro, este irá escrever a nova saída padrão no final do ficheiro existente.
Redirect Standard Error To a File
Da mesma forma que pode redireccionar a saída padrão de escrita para um ficheiro, também pode escrever a saída de erro padrão para um ficheiro.
Para fazer isto, terá de adicionar 2> ao fim do comando, seguido do ficheiro de erro de saída que pretende criar.
Neste exemplo, irá escrever o comando:
dir test.exe > myoutput.txt 2> output.err
Este envia o fluxo de saída padrão para myoutput.txt, e o fluxo de erro padrão para output.err. O resultado é que nenhum fluxo de saída é exibido na janela de console.
No entanto, você pode ver as mensagens de erro digitando output.err. Isto abrirá o arquivo em seu visualizador de arquivo de texto padrão.
Como você pode ver, quaisquer mensagens de erro do comando são enviadas para o arquivo de erro. Tal como na saída padrão, você pode usar >> para anexar o erro a erros de comandos executados anteriormente.
Redirect All Output Writes to a Same File
Todas as abordagens acima resultam em múltiplos ficheiros. Um arquivo é para o fluxo de saída padrão e o outro é para o fluxo de erro padrão.
Se você quiser incluir ambos os outputs no mesmo arquivo, você também pode fazer isso. Para fazer isso, basta redirecionar todos os outputs para o mesmo arquivo usando o seguinte comando.
dir test.exe 1> myoutput.txt 2>&1
Aí está como este comando funciona:
- O output padrão é direcionado para o arquivo de output identificado pelo output número 1.
- A saída de erro padrão identificada pelo número 2 é redirecionada para o arquivo de saída identificado pelo número 1.
Isso irá anexar a saída de erro ao final da saída padrão.
Esta é uma maneira útil de ver todas as saídas para qualquer comando em um arquivo.
Silenciamento Padrão ou Fluxos de Saída de Erro
Pode também desligar a Saída Padrão ou Erro Padrão redirecionando a saída para um NUL ao invés de um arquivo.
Usando o exemplo acima, se você quiser apenas o Saída Padrão e nenhum Erro Padrão, você pode usar o seguinte comando:
dir test.exe 1> myoutput.txt 2>nul
Isto resultará no mesmo arquivo de saída do primeiro exemplo acima onde você apenas redirecionou a Saída Padrão, mas com este comando o erro não irá ecoar dentro da console. Também não irá criar um ficheiro de log de erros.
Isso é útil se você não se importa com nenhum erro e não quer que eles se tornem um incómodo.
Você pode executar qualquer um dos mesmos comandos de saída acima de dentro de um ficheiro BAT e a saída dessa linha irá para o ficheiro de saída que você especificar. Esta é uma forma útil de ver se algum comando dentro de um ficheiro BAT teve algum erro quando tentou correr.