Na sua pergunta, você menciona:
"... it will put the output in a file but not actually execute it. In my case I would need it executed and then logged into a file for later reference."
Como você diz que o programa está sendo executado e sua saída está sendo colocada no arquivo, achei que você quis dizer "exibido" , em vez de "executado" .
Se não foi isso que você quis dizer, provavelmente teria ajudado se isso fosse explicado melhor, talvez com alguma saída de amostra.
De qualquer forma, estou postando esta resposta caso haja outras pessoas que considerem essa pergunta / resposta útil.
Então, basicamente, parece que você quer que a saída de um script seja capturada em um arquivo e também possa ver a saída do script na tela enquanto o script está sendo executado.
(versão dr: use wintee , assim:
script 2>&1 | wtee logfile.txt
)
Para este post, usarei um arquivo de lote de teste pequeno, mas seu script pode ser tão grande e complicado ou tão simples quanto você precisar:
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.
Isto é o que acontece quando eu executo este script em lote:
C:\>a.cmd
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
Observe que no script de teste, a primeira execução do comando "dir" é bem-sucedida e a segunda falha. Eu faço isso apenas para mostrar o que acontecerá com "mensagens de erro" quando você executar seu script.
Se eu executar o script e usar o redirecionamento ( ">" ) para capturar a saída, veremos isso
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:\>
Observe que a mensagem de erro "Arquivo não encontrado" foi exibida na tela quando o script foi executado e não foi realmente capturada no arquivo. Isso porque ">" captura a "saída normal" que foi enviada para o fluxo STDOUT. "Mensagens de erro" normalmente são enviadas para o fluxo STDERR.
Para capturar "saída normal" e "mensagens de erro", você também precisa capturar o fluxo STDERR, que é indicado pelo "2" em "2 > & 1" no comando aqui:
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
No unix, existe um comando padrão: "tee"
Usando o comando "tee", você pode capturar a saída de um programa e também exibir a saída para a tela, ao mesmo tempo.
O comando "tee" não é padrão no Windows, mas você pode baixar uma versão gratuita do "tee" para windows aqui:
wintee . O programa baixado é chamado: "wtee.exe"
.
Você usa o programa "wtee.exe" como mostrado abaixo.
Isso irá capturar a saída do script para o arquivo chamado "log.txt"
como antes, e também exibirá a saída para a tela enquanto o script estiver sendo executado:
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