HOWTO · Batch
Die FOR-Schleife in Batch-Skripten
Verwenden Sie den Windows-cmd.exe-Befehl FOR in Batch-Dateien für Listen, Zahlenbereiche, Ordner, Dateien, geparsten Text und Argumente.
Auf dieser Seite
Verwenden Sie in einer .bat- oder .cmd-Datei FOR mit einer Schleifenvariable mit doppeltem Prozentzeichen wie %%I, um für jedes Element einen Befehl auszuführen. An der interaktiven Eingabeaufforderung verwenden Sie stattdessen ein einzelnes Prozentzeichen, etwa %I; dieser Unterschied ist eine häufige Ursache für fehlerhafte kopierte FOR-Befehle.
FOR kann über eine feste Liste, einen Zahlenbereich, Ordner, Dateien, geparsten Text oder die an ein Skript übergebenen Argumente iterieren. Die folgenden Beispiele verwenden die Syntax von cmd.exe und halten die Ausgabe bewusst klein, damit Sie jeweils eine Form anpassen können.
Über eine Liste oder passende Dateien iterieren
Setzen Sie die Schleifenvariable hinter FOR, die Elemente hinter IN und den Befehl hinter DO. Setzen Sie einen Dateipfad in Anführungszeichen, wenn er Leerzeichen enthalten kann; %%~fI liefert den vollständigen Pfad des Schleifenelements.
@echo off
FOR %%I IN (red green blue) DO echo %%I
Ausgabe:
red
green
blue
Ersetzen Sie die feste Liste durch ein Platzhaltermuster wie ("*.txt"), um passende Dateien im aktuellen Ordner zu verarbeiten. Die Klammern behandeln jeden passenden Pfad als ein Element und sind deshalb bei Dateinamen mit Leerzeichen sicherer.
Mit FOR /L zählen
FOR /L verwendet (Start,Schritt,Ende). Der Endwert wird einbezogen, wenn der Schritt ihn erreichen kann. Für einen absteigenden Bereich muss der Schritt negativ sein; mit einem positiven Schritt wird nicht rückwärts gezählt.
@echo off
FOR /L %%I IN (5,-2,1) DO echo %%I
Ausgabe:
5
3
1
Diese Form eignet sich für Wiederholungen, nummerierte Dateien und Aufgaben mit einer vorhersehbaren Zahlenfolge. Prüfen Sie Richtung und Vorzeichen des Schritts, bevor Sie annehmen, dass die Schleife läuft.
Ordner und Dateien auflisten
Verwenden Sie FOR /D für Ordner, die zu einem Muster passen. Mit FOR /R Stammordner durchsuchen Sie einen Stammordner und seine Unterordner nach Dateien. Der Modifizierer %%~nx gibt nur Name und Erweiterung aus und macht die Beispielausgabe unabhängig vom absoluten Pfad.
@echo off
FOR /D %%D IN (demo\*) DO echo DIR %%~nxD
FOR /R demo %%F IN (*.txt) DO echo FILE %%~nxF
Ausgabe:
DIR one
DIR two
FILE first.txt
FILE second.txt
FOR /R sucht rekursiv; ein breites Platzhaltermuster kann daher mehr Dateien erfassen als erwartet. Beginnen Sie mit echo, prüfen Sie die Treffer und ersetzen Sie es erst dann durch einen Befehl, der Dateien verändert.
Text mit FOR /F parsen
FOR /F liest Zeilen aus einer Datei, einer Zeichenfolge in Anführungszeichen oder der Ausgabe eines anderen Befehls. Standardtrennzeichen sind Leerzeichen und Tabulatoren; geben Sie daher bei bekanntem Trennzeichen tokens und delims an. Hier werden die ersten beiden kommagetrennten Felder zu %%A und %%B.
@echo off
FOR /F "tokens=1,2 delims=," %%A IN (names.txt) DO echo %%A %%B
Ausgabe:
Ada Lovelace
Grace Hopper
Verwenden Sie keinen erfundenen Ausdruck wie "age=23" als Option für FOR /F. Testen Sie die Parsing-Klausel mit repräsentativen Eingaben und beachten Sie, dass leere Zeilen standardmäßig übersprungen werden.
Argumente verarbeiten und Schleifen verschachteln
%* steht für alle an die Batch-Datei übergebenen Argumente. Eine verschachtelte FOR-Schleife kann zwei Mengen kombinieren, aber jede Ebene benötigt eine andere Schleifenvariable. Wenn Sie innerhalb von Klammern eine Umgebungsvariable ändern, aktivieren Sie verzögerte Erweiterung und lesen Sie sie mit !name! statt %name%.
@echo off
FOR %%A IN (%*) DO echo ARG %%A
FOR %%I IN (1 2) DO FOR %%J IN (A B) DO echo PAIR %%I-%%J
Ausgabe bei example.bat first second:
ARG first
ARG second
PAIR 1-A
PAIR 1-B
PAIR 2-A
PAIR 2-B
Batch-Dateien sind für kleine Automatisierungsaufgaben unter Windows praktisch. Für komplexe Datenstrukturen, robuste Fehlerbehandlung oder plattformübergreifende Arbeit ist PowerShell meist wartbarer; beginnen Sie in beiden Werkzeugen mit einer harmlosen echo-Schleife, bevor Sie Dateien umbenennen, kopieren oder löschen.