cmd spart bei wiederkehrenden Aufgaben überraschend viel Zeit. Ob Dateioperationen, rekursive Ordnerdurchläufe oder das Auswerten von Kommandoausgaben: Wer die Syntax versteht, kann Batch-Jobs deutlich stabiler und lesbarer bauen. Ich gehe die Grundform, die wichtigsten Varianten, typische Beispiele und die Stolperfallen durch, damit Sie den Befehl im Alltag wirklich einsetzen können.
Die For-Schleife in CMD ist klein, aber für einfache Automatisierung erstaunlich stark
-
forarbeitet in der Eingabeaufforderung auf Dateien, Verzeichnissen, Texten oder Zahlenbereichen. - Direkt im Terminal nutzen Sie
%f, in Batch-Dateien%%f. - Die Varianten
/l,/r,/fund/ddecken Schleifen, Rekursion und Parsing ab. - Wenn sich Variablen innerhalb der Schleife ändern, ist verzögerte Expansion oft Pflicht.
- Für komplexes Parsing ist PowerShell meist robuster als
cmd.
So funktioniert die Schleife in der Eingabeaufforderung
Die Grundidee ist simpel: for nimmt eine Menge von Werten und führt für jeden Wert denselben Befehl aus. Microsoft dokumentiert das als Befehl, der für jedes Element innerhalb einer Menge einen angegebenen Kommandoaufruf ausführt. Genau deshalb ist er so nützlich für Routineaufgaben, bei denen Sie nicht jeden Dateinamen einzeln anfassen wollen.
Die Standardform sieht so aus:
for %f in (*.txt) do type %f
Direkt an der Eingabeaufforderung verwenden Sie einen einzelnen Prozentwert, in einer Batch-Datei dagegen doppelte Prozentzeichen:
for %%f in (*.txt) do type %%f
Das ist der erste Stolperstein überhaupt: Wer im Skript versehentlich nur %f schreibt, bekommt kein sauberes Loop-Verhalten, sondern meist eine Fehlermeldung oder ignorierte Variablen.
Wichtig sind außerdem drei Details, die in der Praxis gern übersehen werden:
-
inunddosind Pflichtbestandteile. - Die Schleifenvariable ist buchstabenbasiert und case-sensitiv.
- Wie Microsoft angibt, können in einer komplexen Batch-Datei bis zu 52 Variablennamen gleichzeitig aktiv sein.
Für einfache Skripte reicht meist ein einzelnes Zeichen wie %%f. Sobald die Logik wächst, wird der Code lesbarer, wenn Sie bewusst unterschiedliche Variablen für unterschiedliche Ebenen verwenden. Von hier ist es nur ein kleiner Schritt zu den Varianten, die in der Praxis wirklich zählen.
Die Varianten, die ich in der Praxis wirklich nutze
Die normale Form ist nur der Anfang. Interessant wird for erst dann, wenn Sie Verzeichnisse, Zahlenbereiche oder Textausgaben gezielt durchlaufen. Laut Microsoft sind die zusätzlichen Formen über Command Extensions verfügbar, die auf aktuellen Windows-Systemen standardmäßig aktiv sind.
| Variante | Wofür sie gut ist | Stärke | Grenze |
|---|---|---|---|
for |
Dateien oder Wildcards im aktuellen Kontext | Einfach, direkt, schnell lesbar | Kein rekursiver Lauf, kein Zahlenbereich |
for /d |
Nur Verzeichnisse | Sauber, wenn Sie Ordner statt Dateien brauchen | Wirkt nur mit passenden Mustern |
for /r |
Rekursive Durchläufe durch Verzeichnisbäume | Ideal für tiefere Ordnerstrukturen | Kann bei großen Bäumen langsam werden |
for /l |
Zahlenbereiche | Praktisch für Zähler, Tests und Batch-Logik | Nur numerische Schleifen |
for /f |
Textdateien, Kommandoausgaben und Strings parsen | Sehr flexibel | Am anfälligsten für Formatprobleme |
Ich sehe den größten praktischen Unterschied zwischen for und for /f immer wieder in Projekten: Die normale Form arbeitet mit Dateimengen, die /f-Variante zerlegt Text in Zeilen und Tokens. Das klingt nach einem kleinen Unterschied, ist aber in der Umsetzung entscheidend. Wer das verwechselt, baut schnell fragiles Skriptverhalten.
Ein kleiner Merksatz hilft: /l zählt, /r läuft durch Ordner, /f liest Text, /d filtert Verzeichnisse. Damit ist der grobe Werkzeugkasten bereits klar. Im nächsten Schritt wird interessant, wie Sie diese Varianten konkret einsetzen.
Praktische Beispiele für Dateien, Zahlen und Verzeichnisse
Wenn ich eine Schleife in cmd erkläre, starte ich gern mit Beispielen, die sofort nützlich sind. Sie zeigen nicht nur die Syntax, sondern auch, welche Art Problem der jeweilige Loop tatsächlich löst.
Dateien im aktuellen Ordner verarbeiten
Alle Textdateien im aktuellen Verzeichnis ausgeben:
for %f in (*.txt) do type %f
In einer Batch-Datei wird daraus:
for %%f in (*.txt) do type %%f
Das ist banal, aber genau solche Aufgaben sind der eigentliche Sweet Spot von cmd: einfache, klare Wiederholungen ohne zusätzlichen Overhead.
Zahlenbereiche sauber durchlaufen
Wenn Sie einen Zähler oder Testlauf brauchen, ist /l die sauberste Form:
for /l %i in (1,1,5) do @echo Schritt %i
Das erzeugt die Folge 1 bis 5. Der mittlere Wert ist die Schrittweite. Negative Schritte sind ebenfalls möglich, etwa so:
for /l %i in (5,-1,1) do @echo Schritt %i
Für kleine Batch-Checks oder einfache Wiederholungen ist das sehr effizient. Für echte Logik mit Bedingungen und mehreren Datentypen würde ich heute aber meist nicht mehr bei cmd bleiben.
Ordner rekursiv auswerten
Wenn Sie eine komplette Baumstruktur prüfen wollen, ist for /r der richtige Ansatz:
for /r "C:\Logs" %f in (*.log) do @echo %~fF
Mit dem Modifikator %~fF holen Sie sich den vollständigen Pfad des aktuellen Treffers. Das ist nützlich, wenn Sie mit Unterordnern arbeiten und nicht nur den Dateinamen brauchen. Genau hier spielt cmd seine Stärke aus: kurze, direkte Befehle für administrative Routinen.
Text und Kommandoausgaben mit for /f zerlegen
Die flexibelste Form ist for /f. Sie eignet sich für Dateien, Textzeilen und die Ausgabe anderer Befehle. Ein typisches Beispiel ist das Parsen einer Datei mit Trennzeichen:
for /f "tokens=1,2 delims=;" %a in (daten.csv) do @echo %a - %b
Hier trennt delims=; an Semikolons und tokens=1,2 greift die ersten zwei Spalten ab. Mit usebackq können Sie außerdem Dateinamen mit Leerzeichen und Kommandoausgaben in Backticks sauberer behandeln. Das ist praktisch, aber auch der Punkt, an dem Fehler schnell subtil werden.
Eine Faustregel aus der Praxis: Je weniger sich das Eingabeformat ändert, desto eher lohnt sich for /f. Sobald die Ausgabe menschenlesbar, lokalisiert oder unregelmäßig ist, wird das Parsing fragiler. Dann ist die nächste Sektion besonders wichtig.
Die häufigsten Fehler und wie ich sie vermeide
Die meisten Probleme mit einer For-Schleife in cmd haben nichts mit der Schleife selbst zu tun, sondern mit Umgebung, Zitierung und Variablenexpansion. Genau dort lohnt sich sauberes Arbeiten.
-
Ein einzelnes Prozentzeichen in Batch-Dateien ist falsch. Verwenden Sie dort
%%. -
Pfade mit Leerzeichen müssen in Anführungszeichen stehen, sonst zerlegt
cmdden Pfad in mehrere Teile. - Veränderte Variablen innerhalb der Schleife brauchen oft verzögerte Expansion.
-
for /fauf hübsch formatierte Ausgabe ist anfällig, wenn sich die Ausgabe ändert oder lokalisiert ist. -
Ohne
usebackqwerden Anführungszeichen und Backticks nicht so interpretiert, wie viele es erwarten.
Ein Klassiker ist die Zählervariable in einer Schleife. Ohne verzögerte Expansion sehen Sie nicht den aktuellen Wert, sondern oft nur den Startwert. So ist es korrekt:
@echo off
setlocal EnableDelayedExpansion
set count=0
for %%f in (*.txt) do (
set /a count+=1
echo !count!: %%f
)
endlocal
Der entscheidende Unterschied ist !count! statt %count%. Mit setlocal EnableDelayedExpansion wird der Variablenwert erst zur Laufzeit ausgewertet. Das ist kein exotischer Spezialfall, sondern ein Standardwerkzeug für saubere Batch-Dateien. Microsoft dokumentiert das Verhalten bei setlocal ausdrücklich, und genau daran orientiere ich mich in Skripten.
Ein weiterer Punkt, der oft unterschätzt wird: Wenn Sie mit for /f arbeiten, sollten Sie nicht nur an die Syntax denken, sondern an die Datenqualität. Kommt die Ausgabe aus einem anderen Tool, einer anderen Sprache oder einer anderen Windows-Version, kann sich das Format ändern. Dann wird aus einem kleinen Hilfs-Skript schnell ein Wartungsproblem.
Wann CMD genügt und wann PowerShell die bessere Wahl ist
Ich nutze cmd weiterhin gern für schnelle, lokale und klar begrenzte Automatisierung. Für Dateiumbenennungen, einfache Wiederholungen, Reparaturskripte oder Verwaltungsaufgaben ist die For-Schleife vollkommen ausreichend. Wenn der Job klein bleibt, ist cmd oft sogar die bessere Wahl, weil der Einstieg direkter ist.
Sobald aber mehrere Bedingungen, strukturierte Daten oder komplexes Parsing ins Spiel kommen, kippt das Bild. Dann wird PowerShell meist die vernünftigere Lösung, weil sie mit Objekten statt mit reinem Text arbeitet. Das ist in der Praxis weniger fehleranfällig, vor allem bei CSV, JSON, Registry-Abfragen oder größeren Verwaltungsprozessen.
| Aufgabe |
cmd mit for
|
PowerShell |
|---|---|---|
| Einfache Dateioperationen | Sehr gut geeignet | Oft möglich, aber nicht zwingend nötig |
| Zahlen- und Zählerlogik | Gut für einfache Fälle | Stabiler bei komplexerer Logik |
| Textausgabe eines Befehls parsen | Machbar, aber fragil | Deutlich robuster |
| Große Skripte mit Fehlerbehandlung | Eher unkomfortabel | Meist die bessere Wahl |
Meine klare Linie ist deshalb: CMD für einfache, klare, kurzfristige Aufgaben. PowerShell für alles, was wachsen oder wartbar bleiben soll. Das ist keine Ideologie, sondern eine Frage von Fehleranfälligkeit, Lesbarkeit und späterem Aufwand. Wer diese Grenze früh zieht, spart sich viel Debugging.
Woran ich ein sauberes Batch-Skript erkenne
Ein gutes Skript mit for ist nicht das längste, sondern dasjenige, das sich in drei Monaten noch nachvollziehen lässt. Ich achte dabei auf wenige, aber harte Kriterien: klare Variablennamen, korrekt gequotete Pfade, gezielte Nutzung von setlocal und keine überflüssige Parsing-Akrobatik.
Wenn Sie sich nur drei Regeln merken, dann diese: Erstens, im Batch immer %% verwenden. Zweitens, bei variablen Werten innerhalb der Schleife auf verzögerte Expansion umstellen. Drittens, for /f nur dort einsetzen, wo das Eingabeformat wirklich stabil ist. Alles andere führt früher oder später zu einem Skript, das nur unter Idealbedingungen läuft.
Genau darin liegt der praktische Wert der For-Schleife in cmd: Sie ist klein, direkt und nützlich, solange das Problem klein und direkt bleibt. Für Routineaufgaben ist sie immer noch ein gutes Werkzeug. Für komplexere Automatisierung ziehe ich heute aber die Grenze bewusst früher und wechsle auf PowerShell, bevor die Batch-Datei unübersichtlich wird.