web-dev-qa-db-fra.com

Enregistrer une sortie de fichier de commandes complète

J'utilise un script de ligne de commande pour ajuster plusieurs paramètres sur un ordinateur. Toutefois, j'aimerais que l'ensemble de la sortie soit également enregistré dans un fichier .txt ou .log.

Lorsque j'utilise mes connaissances de base du système de journalisation, il place la sortie dans un fichier mais ne l'exécute pas réellement. Dans mon cas, j'aurais besoin de l'exécuter puis de me connecter à un fichier pour référence ultérieure.

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

Merci d'avance! Dempsey

Si la question demande qu'un script soit "exécuté" et que le fichier de commandes complet soit exporté dans un fichier journal dans Windows 8.1, voici la réponse simple:

Incluez ceci au début de votre fichier de commandes ...

@echo off
set LOGFILE=batch.log
call :LOG > %LOGFILE%
exit /B

:LOG
[ your script goes here ]
9
Ingrid

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 de l'exécuter puis de me connecter à 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 en train d’être insérée dans le fichier, j’ai pensé que vous auriez peut-être voulu dire "affiché" , à la place de "exécuté" .

Si ce n'est pas ce que vous vouliez dire, cela aurait probablement aidé si cela avait été 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, en gros, 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; dr version: utilisez wintee , comme ceci:

script 2>&1 | wtee logfile.txt)


Pour cet article, j'utiliserai un petit fichier de test, mais votre script pourrait être aussi volumineux et compliqué que nécessaire:

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 de traitement par lots:

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" est réussie et la seconde échoue. Je ne fais cela que pour montrer ce qu'il adviendra des "messages d'erreur" lorsque vous exécuterez votre script.

Si je lance 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é" était affiché à l'écran lors de l'exécution du script et qu'il n'était pas réellement capturé dans le fichier. En effet, ">"enregistre la "sortie normale" 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, indiqué par le "2"in "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é s'appelle: "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 auparavant 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
3
Kevin Fegan

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é.

0
Thorsten Staerk