Protokollieren Sie die gesamte Ausgabe einer Batchdatei

11

Ich verwende ein Befehlszeilenskript, um mehrere Einstellungen auf einem Computer anzupassen. Ich möchte jedoch, dass die gesamte Ausgabe auch in einer TXT- oder Protokolldatei protokolliert wird.

Wenn ich meine Grundkenntnisse des Protokollierungssystems verwende, wird die Ausgabe in eine Datei eingefügt, aber nicht tatsächlich ausgeführt. In meinem Fall müsste es ausgeführt und dann zur späteren Bezugnahme in eine Datei eingeloggt werden.

Würde mir jemand sagen können, wie das geht?

Danke im Voraus! Dempsey

Dempsey FoxDie Van Assche
quelle
Sie haben noch nicht einmal ein Betriebssystem angegeben!
Michael Hampton

Antworten:

10

Wenn die Frage die "Ausführung" eines Skripts und die Ausgabe der gesamten Batchdatei in eine Protokolldatei in Windows 8.1 erfordert, lautet die einfache Antwort:

Fügen Sie dies am Anfang Ihrer Batch-Datei ein ...

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

:LOG
[ your script goes here ]
Ingrid
quelle
Großartig, vielen Dank! (Natürlich wird% LOGFILE% hier nicht wirklich benötigt .: P)
Andrew
1
Mein Skript wirft eine Frage auf - ich sehe es nicht, wenn dies verwendet wird. Wie kann ich alles protokollieren und während der Ausführung auf dem Bildschirm sehen?
Simon
Ja, wie würden Sie das tun, damit Sie es sehen können, während es auf Ihrem Bildschirm angezeigt wird?
Karl-Polizei
3

In Ihrer Frage erwähnen Sie:

"... es wird die Ausgabe in eine Datei einfügen, aber nicht tatsächlich ausführen. In meinem Fall müsste sie ausgeführt und dann zur späteren Bezugnahme in einer Datei angemeldet werden."

Da Sie sagen, dass das Programm ausgeführt wird und seine Ausgabe in die Datei eingefügt wird, dachte ich, dass Sie möglicherweise "angezeigt" statt "ausgeführt" gemeint haben .

Wenn Sie das nicht gemeint haben, hätte es wahrscheinlich geholfen, wenn dies besser erklärt worden wäre, vielleicht mit einer Beispielausgabe.

Auf jeden Fall poste ich diese Antwort, falls es andere gibt, die diese Frage / Antwort hilfreich finden.

Im Grunde klingt es so, als ob Sie möchten, dass die Ausgabe eines Skripts in einer Datei erfasst wird und dass die Ausgabe des Skripts auch auf dem Bildschirm angezeigt wird, während das Skript ausgeführt wird.

(tl; dr version: benutze wintee wie folgt :

script 2>&1 | wtee logfile.txt)


Für diesen Beitrag werde ich eine kleine Test-Batch-Datei verwenden, aber Ihr Skript kann so groß und kompliziert oder so einfach sein, wie Sie es benötigen:

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.


Folgendes passiert, wenn ich dieses Batch-Skript ausführe:

C:\>a.cmd
Command: "dir /b a*"
a.cmd

Command: "dir /b non-existant-file"
File Not Found

Beachten Sie, dass im Testskript die erste Ausführung des Befehls "dir" erfolgreich ist und die zweite fehlschlägt. Ich mache dies nur, um zu zeigen, was mit "Fehlermeldungen" passiert, wenn Sie Ihr Skript ausführen.

Wenn ich das Skript ausführe und die Ausgabe mit Umleitung ( ">" ) aufzeichne, wird dies angezeigt

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:\>

Beachten Sie, dass die Fehlermeldung "Datei nicht gefunden" beim Ausführen des Skripts auf dem Bildschirm angezeigt wurde und nicht tatsächlich in der Datei erfasst wurde. Dies liegt daran, dass ">" die "normale Ausgabe " erfasst, die an den STDOUT-Stream gesendet wurde. "Fehlermeldungen" werden normalerweise an den STDERR-Stream gesendet.

Um "normale Ausgabe" und "Fehlermeldungen" zu erfassen, müssen Sie auch den STDERR-Stream erfassen, der im Befehl hier durch "2" in "2> & 1" angezeigt wird :

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

Unter Unix gibt es einen Standardbefehl: "tee"

Mit dem Befehl "tee" können Sie die Ausgabe eines Programms erfassen und gleichzeitig die Ausgabe auf dem Bildschirm anzeigen.

Der Befehl "tee" ist bei Windows nicht Standard, aber Sie können hier eine kostenlose Version von "tee" für Windows herunterladen: wintee . Das heruntergeladene Programm heißt : "wtee.exe".

Sie verwenden das Programm "wtee.exe" wie unten gezeigt.

Dadurch wird die Skriptausgabe in der zuvor genannten Datei erfasst "log.txt"und die Ausgabe auf dem Bildschirm angezeigt, während das Skript ausgeführt wird:

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
Kevin Fegan
quelle
0

Dieses Skript führt ls aus und protokolliert seine Ausgabe in einer Datei namens log.txt:

exec >log.txt 2>&1
ls

Das Protokoll wird nicht ausgeführt.

Thorsten Staerk
quelle
1
Beachten Sie, dass dies Unix / Linux voraussetzt, aber ich vermute, dass das OP über Windows spricht. Es wird auch kein Skript ausgeführt, sondern die Ausgabe der von Ihnen eingegebenen Befehle protokolliert und die kritischen Informationen darüber, wie der Wahnsinn gestoppt werden kann, weggelassen ...
Sven
Ich spreche in der Tat über Windows. Vielen Dank :)
Dempsey FoxDie Van Assche