FOR
Führt einen Befehl für jede einzelne Datei eines Satzes von Dateien aus.
FOR %Variable IN (Satz) DO Befehl [Parameter]
%Variable Ein ersetzbarer Parameter
(Satz) Eine Satz von mindestens einer Datei. Platzhalter sind zulässig.
Befehl Befehl, der für jede Datei ausgeführt werden soll
Parameter Parameter und Optionen für die angegebenen Befehle
Um den FOR-Befehl in einem Batch-Programm zu benutzen, geben Sie %%Variable
statt %Variable an. Beachten Sie die Gross-/Kleinschreibung bei Variablennamen,
%i und %I sind verschieden.
Wenn die Befehlserweiterungen aktiviert sind, werden folgende
Ergänzungen für den FOR-Befehl unterstützt:
FOR /D %Variable IN (Satz) DO Befehl [Parameter]
Wenn der Satz Platzhalter enthält, dann bezieht sich der FOR-Befehl
auf Verzeichnisse und nicht auf Dateien.
FOR /R [[Laufwerk:]Pfad] %Variable IN (Satz) DO Befehl [Parameter]
Der FOR-Befehl wird ausgehend vom Verzeichnis [Laufwerk:]Pfad (als
root) für jedes darunterliegende Verzeichnis ausgeführt. Wenn kein
Verzeichnis nach der /R-Option angegeben ist, wird das aktuelle
Verzeichnis verwendet. Wenn der Satz nur einen einzelnen Punkt als
als Zeichen (.) enthält, wird nur die Verzeichnisstruktur aufgelistet.
FOR /L %Variable IN (Start,Schritt,Ende) DO Befehl [Parameter]
Der Satz ist eine Folge von Zahlen von Start bis Ende und der
angegebenen Schrittweite. So erzeugt (1,1,5) die Folge 1 2 3 4 5 und
(5,-1,1) erzeugt die Folge (5 4 3 2 1).
FOR /F ["Optionen"] %Variable IN (Dateien-Satz) DO Befehl [Parameter]
Der Dateien-Satz besteht aus einem oder mehreren Dateinamen. Jede Datei
wird geöffnet, gelesen und bearbeitet, dann wird zur nächsten Datei des
Satzes gegangen. Die Bearbeitung einer Datei erfolgt zeilenweise, jede
einzelne Textzeile wird analysiert und in die entsprechenden Token (keinen
oder mehrere) zerlegt. Die Befehle in der FOR-Schleife werden dann mit den
Variablenwerten (d.h. den gefunden Zeichenketten bzw. Token) aufgerufen.
Standardmässig liefert /F den ersten, durch ein Leerzeichen getrennten Token
von jeder Zeile in jeder Datei. Leerzeilen werden übersprungen. Das
standardmässige Verhalten bei der Analyse kann wahlweise durch den Parameter
"Optionen" überschrieben werden. Das ist eine Zeichenkette in Anführungs-
zeichen, welche eines oder mehrere Schlüsselwörter enthält, um verschiedene
Parameter für die Analyse anzugeben. Diese Schlüsselwörter sind:
eol=c - gibt das Zeichen für das Zeilenende an (nur eins)
skip=n - gibt die Anzahl der Zeilen an, die am Anfang einer
Datei übersprungen werden
delims=xxx - gibt einen Satz von Trennzeichen an, das ersetzt die
Standardtrennzeichen TAB und Leerzeichen.
tokens=x,y,m-n - gibt an, welche Token von jeder Zeile an die
FOR-Schleife weitergegeben werden
Das führt dazu, dass zusätzliche Variablen erzeugt
werden. Mit der Form m-n wird dabei ein Bereich vom
m-ten bis zum n-ten Token angegeben. Wenn das letzte
Zeichen ein Sternchen ist, wird eine zusätzliche
Variable deklariert, die den verbleibenden Text
dieser Zeile enthält.
Folgendes Beispiel soll das nochmals verdeutlichen:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k
Dadurch wird jede Zeile in der Datei myfile.txt analysiert, Zeilen die mit
einem Semikolon beginnen werden ignoriert, für den 2. und 3. Token jeder
Zeile werden die Befehle in der FOR-Schleife ausgeführt. Trennzeichen sind
Kommas und/oder Leerzeichen. In der FOR-Schleife wird der Ausdruck %i
verwendet, um den 2. Token zu erhalten, %j für den 3. Token und %k, um
alle übrigen Token zu erhalten.
Dabei ist %i explizit deklariert, während %j und %k implizit durch die
Option "tokens=" deklariert werden. Sie können bis zu 26 Token durch diese
Option angeben, vorausgesetzt es wird dadurch nicht versucht, eine
Variable mit einem Buchstaben grösser als 'z' zu deklarieren. Bedenken Sie,
dass FOR-Variablen global sind und nicht mehr als insgesamt 26 zu einem
bestimmten Zeitpunkt aktiv sein dürfen.
Sie können den Befehl FOR /F auch direkt mit einer Zeichenkette verwenden,
indem Sie als Dateien-Satz zwischen den Klammern diese Zeichenkette in
doppelten Anführungszeichen angeben. Diese Zeichenkette wird dabei als
einzelne Zeile einer Datei betrachtet und analysiert.
Schliesslich können Sie den Befehl FOR /F auch verwenden, um die Ausgabe
eines Befehls zu analysieren. Dazu geben Sie als Dateien-Satz zwischen den
Klammern eine Zeichenkette in einfachen Anführungszeichen an. Diese
Zeichenkette wird dabei als Befehlszeile betrachtet und von einer unter-
geordneten CMD.EXE ausgeführt. Die Ausgabe dieses Befehls wird dann wie
eine normale Datei analysiert. Das folgende Beispiel listet die Umgebungs-
variablen im aktuellen Verzeichnis auf:
FOR /F "delims==" %i IN ('set') DO @echo %i
Zusätzlich wurde die Ersetzung von Verweisen auf FOR-Variablen erweitert.
Sie können jetzt folgende Syntax benutzen:
%~fi - expandiert %i zu einem vollständigen Dateinamen
%~di - erzeugt nur den Laufwerksbuchstaben von %i
%~pi - erzeugt nur den Pfad von %i
%~ni - erzeugt nur den Dateinamen von %i
%~xi - erzeugt nur die Dateierweiterung von %i
%~si - erzeugter Pfad enthält nur kurze Dateinamen
%~$PATH:i - durchsucht die in der PATH-Umgebungsvariablen
angegebenen Verzeichnisse und expandiert die erste
gefundene Datei %i zu dem vollständigen Dateinamen.
Wenn der Name der Umgebungsvariablen nicht definiert
ist oder diese Datei bei der Suche nicht gefunden wurde,
wird dieser Parameter zu einer leeren Zeichenkette
expandiert.
Diese Parameter können auch miteinander kombiniert werden:
%~dpi - erzeugt den Laufwerksbuchstaben und Pfad von %i
%~nxi - erzeugt den Dateinamen und die Dateierweiterung von %i
%~fsi - expandiert %i zu einem vollständigen Namen, der nur
kurze Dateinamen enthält
%~dp$PATH:i - durchsucht die in der PATH-Umgebungsvariablen
angegebenen Verzeichnisse nach %i und erzeugt den
Laufwerkbuchstaben und Pfad der ersten gefundenen Datei.
In den angegebenen Beispielen können %i und PATH durch andere gültige
Werte ersetzt werden. Seien Sie sorgfältig bei der Wahl der Buchstaben für Ihre
FOR-Variablen, wenn Sie die erweiterte Logik für die Ersetzung von Variablen
verwenden wollen. Andernfalls kann es zu einer widersprüchlichen Befehls-
syntax kommen.