Schnell automatisiert II

Batchen wie die Profis

Mit Batch-Programmen lassen sich auch komplexere Aufgaben lösen. In diesem Beitrag erfahren Sie, wie Sie die Batch-Programme voll ausreizen um aufwendige Tätigkeiten zu automatisieren.

Mit dem FOR Befehl kann ein anzugebender Befehl auf einen Satz an Dateien angewendet werden. Die Art und Weise in der der Satz an Dateien angegeben wird hat dabei viele Spielarten, so kann dieser Satz beispielsweise auch aus dem Resultat eines anderen Programms entnommen werden - das Programm 'findstr' liefert beispielsweise ein brauchbares Ergebnis.

Im folgenden wird ein Beispielprogramm entwickelt das alle Dateien der lokalen Festplatte nach einem bestimmten Text durchsucht. Jede Datei die den gesuchten Text enthält wird mit Notepad oder einem alternativem Programm geöffnet.

@pushd \
@for /F %%i in ('@findstr /S /I /M /P %1 *.*') do @start notepad %%i
@popd

Die @-Zeichen im Batch haben nur den Zweck, das die Zeilen die dieses Zeichen vorangestellt haben vor ihrer Ausführung nicht angezeigt werden: Das macht die Bildschirmanzeige übersichtlicher. Der erste Befehl im Batch ist das Kommando 'pushd' - dieses merkt sich das aktuelle Verzeichnis und wechselt dann in das angegebene - in diesem Fall das Wurzelverzeichnis ('\') der aktuellen Festplatte. Dies geschieht, damit das Batch-Programm von jedem Verzeichnis auf der Festplatte aufgerufen werden kann, aber trotzdem immer die ganze Platte durchsucht. Am ende des Programms wird dann das mit pushd 'gemerkte' Verzeichnis wieder hergestellt - der letzte Befehl im Batch 'popd' übernimmt diese Aufgabe.

Die etwas komplizierte mittlere Zeile (for /F %%i in ('@findstr /S /I /M /P %1 *.*') do @start notepad %%I) macht den eigentliche Batch aus und erledigt die ganze Arbeit. Zunächst wird der FOR Befehl aufgerufen und erhält im Aufruf den Parameter /F und %%i. Das /F %%i steht dabei für die FOR-Option mit die zu untersuchenden 'Tokens' angegeben werden - im Fall von %%i sind das einfach alle Dateien aus dem angegebenen Set.


Das Wort 'in' steht vor dem Set an Dateien, und dieses ist innerhalb der runden Klammern spezifiziert. Im einfachsten Fall könnte man also in etwa (*.txt) in die runden Klammern setzen - dann würden nur Dateien mit der Erweiterung *.txt von FOR behandelt. Im Beispiel wird aber nicht einfach ein Set an Dateien statisch festgelegt, sondern statt dessen der 'findstr' Befehl verwendet um dieses Set zu ermitteln. Das bedeutet, das das FOR Kommando zunächst den Befehl 'findstr' mit allen angegebenen Parametern ausführt und dessen Rückgabewert als Datei-Set betrachtet. Dies gelingt, weil findstr in der angegebenen Form als Rückgabewert einen genau passenden Satz an Dateien liefert.

Damit 'findstr' weiß nach welchem Text es suchen soll, erhält er die Angabe %1 als Parameter: Dies ist der erste an das Batch-Programm übergebene Parameter. Wird ein Batch mit Parametern aufgerufen - zum Beispiel 'Test.bat harri boo' - dann werden diese Parameter innerhalb des Batches mit den Optionen %1, %2 und so weiter beziffert. 'harri' entspricht also %1 und 'boo' entspricht %2.

Für alle von 'findstr' gefundenen Dateien führt das FOR Kommando nun ein Kommando aus. Welches, steht hinter dem Schlüsselwort 'do'. Im Beispiel ist dies der Befehl 'start notepad' mit dem Parameter %%i. 'Start notepad' startet einfach das Programm 'notepad', der Parameter %%i entspricht dem 'i' aus dem Anfang des Befehls - er enthält also für jeden Aufruf von notepad den Namen einer der gefundenen Dateien.

Artikel kommentieren