Dans votre question, vous mentionnez:
"... il mettra la sortie dans un fichier mais ne l'exécutera pas réellement. Dans mon cas, j'aurais besoin qu'il soit exécuté puis connecté à un fichier pour référence ultérieure."
Puisque vous dites que le programme est en cours d'exécution et que sa sortie est placée dans le fichier, j'ai pensé que vous auriez pu vouloir dire "affiché" , au lieu de "exécuté" .
Si ce n'est pas ce que vous vouliez dire, cela aurait probablement aidé si cela était mieux expliqué, peut-être avec un exemple de sortie.
Dans tous les cas, je poste cette réponse au cas où d'autres trouveraient cette question / réponse utile.
Donc, fondamentalement, il semble que vous souhaitiez que la sortie d'un script soit capturée dans un fichier et que vous puissiez également voir la sortie du script à l'écran pendant l'exécution du script.
(tl; version dr: utilisez wintee , comme ceci:
script 2>&1 | wtee logfile.txt
)
Pour cet article, j'utiliserai un petit fichier batch de test, mais votre script pourrait être aussi gros et compliqué ou aussi simple que vous en avez besoin:
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.
Voici ce qui se passe lorsque j'exécute ce script batch:
C:\>a.cmd
Command: "dir /b a*"
a.cmd
Command: "dir /b non-existant-file"
File Not Found
Notez que dans le script de test, la première exécution de la commande "dir" réussit et la seconde échoue. Je fais cela uniquement pour montrer ce qui se passera avec les "messages d'erreur" lorsque vous exécuterez votre script.
Si j'exécute le script et utilise la redirection ( ">" ) pour capturer la sortie, je verrai ceci
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:\>
Notez que le message d'erreur "Fichier non trouvé" a été affiché à l'écran lors de l'exécution du script et n'a pas été réellement capturé dans le fichier. C'est parce que ">" capture la "sortie normale" qui a été envoyée au flux STDOUT. Les "messages d'erreur" sont normalement envoyés au flux STDERR.
Pour capturer la "sortie normale" et les "messages d'erreur", vous devez également capturer le flux STDERR, qui est indiqué par le "2" dans "2> & 1" dans la commande ici:
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
Sous Unix, il existe une commande standard: "tee"
En utilisant la commande "tee", vous pouvez capturer la sortie d'un programme, et également afficher la sortie à l'écran en même temps.
La commande "tee" n'est pas standard avec Windows, mais vous pouvez télécharger une version gratuite de "tee" pour Windows ici:
wintee . Le programme téléchargé est nommé: "wtee.exe"
.
Vous utilisez le programme "wtee.exe" comme indiqué ci-dessous.
Cela capturera la sortie du script dans le fichier nommé "log.txt"
comme précédemment, et affichera également la sortie à l'écran pendant l'exécution du script:
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