Nella tua domanda, menzioni:
"... inserirà l'output in un file ma in realtà non lo eseguirà. Nel mio caso avrei bisogno che venga eseguito e quindi registrato in un file per riferimento futuro."
Dato che dici che il programma è in esecuzione e il suo output viene inserito nel file, ho pensato che avresti potuto significare "visualizzato" , anziché "eseguito" .
Se questo non fosse ciò che intendevi, probabilmente sarebbe stato d'aiuto se ciò fosse spiegato meglio, forse con qualche output di esempio.
In ogni caso, sto pubblicando questa risposta nel caso in cui altri trovino utile questa domanda / risposta.
Quindi, fondamentalmente, sembra che tu voglia catturare l'output di uno script in un file e poter anche vedere l'output dello script sullo schermo mentre lo script è in esecuzione.
(tl; versione dr: usa wintee , in questo modo:
script 2>&1 | wtee logfile.txt
)
Per questo post, userò un piccolo file batch di test, ma il tuo script potrebbe essere grande e complicato o semplice quanto ti serve:
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.
Questo è ciò che accade quando eseguo questo script batch:
C:\>a.cmd
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
Si noti che nello script di test la prima esecuzione del comando "dir" ha esito positivo e la seconda ha esito negativo. Faccio questo solo per mostrare cosa accadrà con i "messaggi di errore" quando esegui il tuo script.
Se eseguo lo script e utilizzo il reindirizzamento ( ">" ) per acquisire l'output, vedrò questo
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:\>
Si noti che il messaggio di errore "File non trovato" è stato visualizzato sullo schermo quando è stato eseguito lo script e non è stato effettivamente acquisito nel file. Questo perché ">" acquisisce "output normale" che è stato inviato al flusso STDOUT. I "messaggi di errore" vengono normalmente inviati al flusso STDERR.
Per acquisire "output normale" e "messaggi di errore", è necessario acquisire anche il flusso STDERR, indicato da "2" in "2> & 1" nel comando qui:
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
In unix, esiste un comando standard: "tee"
Usando il comando "tee", puoi catturare l'output da un programma e anche visualizzare l'output sullo schermo, allo stesso tempo.
Il comando "tee" non è standard con Windows, ma puoi scaricare una versione gratuita di "tee" per Windows qui:
wintee . Il programma scaricato si chiama: "wtee.exe"
.
Si utilizza il programma "wtee.exe" come mostrato di seguito.
Questo acquisirà l'output dello script nel file denominato "log.txt"
come in precedenza e visualizzerà l'output sullo schermo mentre lo script è in esecuzione:
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