Enregistrez une sortie de fichier de lot entière

J'utilise un script de ligne de commande pour ajuster plusieurs paramètres sur un ordinateur. Cependant, j'aimerais que la sortie entière soit également connectée à un fichier .txt ou .log.

Lorsque j'utilise mes connaissances de base sur le système de journalisation, il mettra la sortie dans un fichier mais ne l'exécutera pas. Dans mon cas, j'aurais besoin d'être exécuté et ensuite connecté à un fichier pour une référence ultérieure.

Quelqu'un pourrait-il me dire comment faire cela?

Merci d'avance! Dempsey

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 d'être exécuté puis connecté à un fichier pour une référence ultérieure".

Puisque vous dites que le programme est en cours d'exécution et que son produit est mis dans le fichier, je pensais que vous auriez pu signifier «affiché» , au lieu de «exécuter» .

Si ce n'est pas ce que vous vouliez dire, il aurait probablement aidé si cela a été expliqué mieux, peut-être avec un échantillon de sortie.

En tout cas, je publie cette réponse s'il y a d'autres personnes qui trouvent cette question / réponse utile.

Donc, en gros, il semble que vous voulez que la sortie d'un script soit capturée dans un fichier et que vous puissiez voir la sortie du script à l'écran pendant que le script est en cours d'exécution.

(Tl; dr version: utilisez wintee , comme ceci:

script 2>&1 | wtee logfile.txt script 2>&1 | wtee logfile.txt )

Pour cette publication, j'utiliserai un petit fichier de test, mais votre script pourrait être aussi grand et compliqué ou aussi simple que vous le souhaitez:

 C:\>type a.cmd @echo off echo Command: "dir /ba*" dir /ba* echo. echo Command: "dir /b non-existant-file" dir /b non-existant-file echo. 

C'est ce qui se passe lorsque je lance ce script par lot:

 C:\>a.cmd Command: "dir /ba*" 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" est réussie et la seconde échoue. Je ne le fais que pour montrer ce qui se passera avec des "messages d'erreur" lorsque vous exécutez votre script.

Si je lance le script et utilise la redirection ( ">" ) pour capturer la sortie, je verrai cela

 C:\>a.cmd > log.txt File Not Found C:\>type log.txt Command: "dir /ba*" a.cmd Command: "dir /b non-existant-file" C:\> 

Notez que le message d'erreur «Fichier introuvable» a été affiché à l'écran lorsque le script a été exécuté et qu'il n'a pas été capturé dans le fichier. C'est parce que ">" capture "sortie normale" qui a été envoyée au flux STDOUT. Les "messages d'erreur" sont normalement envoyés au flux STDERR.

Pour capturer "sortie normale" et "messages d'erreur", vous devez également capturer le flux STDERR, qui est indiqué par "2" dans "2> & 1" dans la commande ici:

 C:\>a.cmd > log.txt 2>&1 C:\>type log.txt Command: "dir /ba*" a.cmd Command: "dir /b non-existant-file" File Not Found 

Dans unix, il existe une commande standard: "tee"

À l'aide de la commande "tee", vous pouvez capturer la sortie d'un programme et afficher la sortie sur 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é s'appelle "wtee.exe" .

Vous utilisez le programme "wtee.exe" comme indiqué ci-dessous.

Cela va capturer la sortie du script dans le fichier nommé "log.txt" comme précédemment, et il affichera également la sortie sur l'écran pendant que le script est en cours d'exécution:

 C:\>a.cmd 2>&1 | wtee log.txt Command: "dir /ba*" a.cmd Command: "dir /b non-existant-file" File Not Found C:\>type log.txt Command: "dir /ba*" a.cmd Command: "dir /b non-existant-file" File Not Found 

Si la question demande qu'un script soit "exécuté" et que tout le fichier batch soit envoyé à un fichier journal dans Windows 8.1, alors voici la réponse simple:

Incluez ceci au début de votre fichier batch …

 @echo on set LOGFILE=batch.log call :LOG > %LOGFILE% exit :LOG [ your script goes here ] 

Ce script exécutera ls et enregistrera sa sortie dans un fichier appelé log.txt:

 exec >log.txt 2>&1 ls 

Le journal ne sera pas exécuté.