Die standalone console version von 7-Zip eignet sich wunderbar für Skripte zum Automatisieren von Archivierungen, Datensicherungen usw. Möchte man ein Protokoll erhalten, welches sowohl die allgemeinen Ausgaben als auch evtl. Fehlermeldungen enthält, muss eine Kleinigkeit beachtet werden.
In Batch-Skripten unter Windows kann i.d.R. einfach die Standard-Ausgabe umgeleitet werden:
7z.exe a <Archivname.7z> <Quelle>\ > 7-Zip-Log.txt
Dies ergibt ein Protokoll wie dieses:
7-Zip [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04 Scanning the drive: 67 folders, 722 files, 204362247 bytes (195 MiB) Creating archive: <Archivname.7z>
Soweit so gut. Kommt es allerdings zu einer Warnung oder zu einem Fehler, so fehlt dies im Protokoll. Über den Rückgabewert (Errorlevel) kann man auf jeden Fall das Ergebnis von 7-Zip erhalten und so z.B. eine “Fehlerstatus-Datei” erstellen:
if not %errorlevel%==0 echo %date% 7-Zip - Fehler - %errorlevel% > 7-Zip-Error.txt
Dieses Konstrukt funktioniert bei uns mittels Aufgabe wunderbar. Aber leider war im Fehlerfall immer eine manueller Durchlauf nötig um Anhand der Ausgabe zu sehen, woran es hängt. Beim umfangreichen “Archiv-Bau” eine minunter langwierige Aufgabe. Daher musste eine Verbesserung her.
Damit nicht nur die Standard-Ausgabe, sondern auch die Fehlerausgabe umgeleitet wird, muss lediglich eine kleine Ergänzung hinzu kommen:
7z.exe a <Archivname.7z> <Quelle>\ > 7-Zip-Log.txt 2>&1
Es muss also nur ” 2>&1″ angehängt werden. Dies sorgt dafür, das die Ausgaben zusammengefasst werden und letztlich ins Protokoll gelangen. Führt man den Befehl bzw. das Skript nun aus, sieht man allerdings nichts mehr in der Eingabeaufforderung, dies ist nur ein kleiner Wehrmutstropfen, schließlich läuft dieses nachts als Aufgabe.
Im Fehlerfall sieht das Protokoll z.B. so aus:
7-Zip [64] 16.04 : Copyright (c) 1999-2016 Igor Pavlov : 2016-10-04 Scanning the drive: 67 folders, 722 files, 204362247 bytes (195 MiB) Creating archive: <Archivname.7z> ERROR: Duplicate filename on disk: <Pfad\Dateiname.pdf> <Pfad\Dateiname.PDF>
Die Leerzeilen zwischen “Creating…” und “ERROR:” sind kein Fehler, sondern entstehen beim Durchlauf. In diesem Beispiel gab es beim Packen von Dateien die auf einem Linux-Server liegen einen Konflikt. Windows unterscheidet nicht zwischen Groß- und Kleinschreibung, unixoide Betriebssysteme wie Linux allerdings schon.
Der Rückgabewert war in diesem Fall eine Zwei für Warnung. Die verfügbaren Errorlevels lauten übrigens:
Code / Meaning 0 / No error 1 / Warning (Non fatal error(s)). For example, one or more files were locked by some other application, so they were not compressed. 2 / Fatal error 3 / change identified (does this indicate a change in the archive file itself or a difference when comparing archive file contents to the original source?) 7 / Command line error 8 / Not enough memory for operation 255 / User stopped the process
Quelle: 7-Zip 7z.exe ERRORLEVEL Codes
Anbei ein paar Links mit weiteren Infos und Quellen:
7-Zip – Discussion – Output log of 7zip extract
Rob van der Woude’s Scripting Pages – Batch files – Redirection
Windows XP Professional Product Documentation – Using command redirection operators
Verheiratet, Vater von zwei Kindern, eines an der Hand, eines im Herzen. Schon immer Technik-Freund, seit 2001 in der IT tätig und seit über 10 Jahren begeisterter Blogger. Mit meiner Firma IT-Service Weber kümmern wir uns um alle IT-Belange von gewerblichen Kunden und unterstützen zusätzlich sowohl Partner als auch Kollegen.
Schreibe einen Kommentar