Teil 1: Allgemeine Problemstellungen

Shell Scripting unter Windows

Größe einer Datei feststellen

Wie im Abschnitt „StdErr für die Fehlererkennung benutzen“ erläutert, lassen sich Dateien, die durch eine Ausgabeumleitung erzeugt wurden, gut für die Fehlererkennung benutzen. Das Problem innerhalb eines Batches liegt nun darin festzustellen, ob eine Datei leer ist (also eine Größe von 0 Byte besitzt) oder nicht. Unter DOS gab es früher die undokumentierte Möglichkeit, über das Kommando copy <datei>+,, diese Datei zu löschen, falls sie 0 Byte groß war. Unter NT und aufwärts funktioniert dieser Ansatz aber nicht mehr, hier geht es dafür einfacher.

Über Modifikatoren lassen sich einzelne Elemente einer Datei ansprechen, der Modifikator "z" beschreibt dabei die Größe einer Datei. Das funktioniert auch bei einer Batchdatei, sofern es sich dabei um existierende Dateinamen handelt. Damit lässt sich dann eine interne Sprungmarke aktivieren, die genau diese Prüfung für eine Datei durchführt und diese dann löscht, falls die Dateigröße 0 Byte beträgt. Das nachfolgende Listing zeigt ein Beispiel für einen solchen Test beim Kopieren von Dateien.

xcopy *.* g:\tmp\daten\zeug\*.* /Y 2> %temp%\x.x
call :chkzero %temp%\x.x
if exist %temp%\x.x echo Fehler!
goto :eof

:: -------- helper routines --------

:chkzero
if %~z1 == 0 del %1
goto :eof

Die eigentliche Fehlerprüfung erfolgt in der dritten Zeile der Datei. Falls die Datei x.x im temporären Verzeichnis noch existiert, war sie länger als 0 Byte und enthält damit die Fehlermeldung. Dies ist auch der Grund, warum der Code die Datei nur dann löscht, wenn sie 0 Byte lang ist. So wird die leere Datei im Erfolgsfall gelöscht, und es gehen keine Informationen verloren. Sie können nun jederzeit nach einem positiven Test auf die Existenz der Datei die darin enthaltene Fehlermeldung auslesen und verarbeiten.