Enregistrer une sortie de fichier de commandes entière


11

J'utilise un script de ligne de commande pour ajuster plusieurs paramètres sur un ordinateur. Cependant, je voudrais que la sortie entière soit également connectée 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 qu'il soit exécuté puis connecté à un fichier pour référence ultérieure.

Quelqu'un pourrait-il me dire comment procéder?

Merci d'avance! Dempsey


Vous n'avez même pas spécifié de système d'exploitation!
Michael Hampton

Réponses:


10

Si la question demande qu'un script soit "exécuté" et que l'intégralité du fichier de commandes soit exporté vers un fichier journal dans Windows 8.1, alors voici la réponse simple:

Incluez-le au début de votre fichier de commandes ...

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

:LOG
[ your script goes here ]

Excellent merci! (Bien sûr,% LOGFILE% n'est pas vraiment nécessaire ici.: P)
Andrew

1
Mon script pose une question - je ne le vois pas s'il est utilisé. Comment tout enregistrer et le voir à l'écran pendant l'exécution?
Simon

Ouais, comment feriez-vous pour que vous puissiez le voir pendant qu'il est sur votre écran?
karl-police

3

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

0

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


1
Notez que cela suppose Unix / Linux, mais je suppose que l'OP parle de Windows. Il ne s'agit pas non plus d'exécuter un script, mais d'enregistrer la sortie des commandes que vous entrez et d'omettre les informations critiques sur la façon d'arrêter la folie ...
Sven

Je parle en effet de Windows. Merci bien :)
Dempsey FoxDie Van Assche
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.