BAT-Datei in mehreren Ordnern ausführen: So geht’s in Windows 11 und 10

BAT-Datei in mehreren Ordnern ausführen: Erfahren Sie Schritt für Schritt, wie Sie in Windows 11 und 10 Batch-Skripte für mehrere Verzeichnisse nutzen.

BAT-Datei in mehreren Ordnern ausführen: So geht’s in Windows 11 und 10

Sie möchten eine Batch-Datei automatisch in mehreren Ordnern ausführen, ohne jeden Pfad manuell aufzurufen? Das ist in Windows 10 und Windows 11 deutlich einfacher möglich, als viele vermuten.

Mit wenigen Zeilen Skriptcode durchläuft Ihre BAT-Datei beliebig viele Verzeichnisse – wahlweise rekursiv oder nur auf einer Ebene. Dieser Artikel zeigt Ihnen alle Methoden, erklärt Varianten und hilft bei typischen Fehlern.

Was ist eine BAT-Datei und wofür wird sie genutzt?

Eine BAT-Datei (auch Batch-Datei oder Batch-Skript genannt) ist eine Textdatei mit der Endung .bat, die eine Folge von Befehlen für die Windows-Eingabeaufforderung (cmd.exe) enthält. Beim Doppelklick oder Aufruf über die Kommandozeile führt Windows diese Befehle der Reihe nach aus – ähnlich wie ein kleines Programm.

Deshalb eignen sich BAT-Dateien hervorragend für wiederkehrende Aufgaben: zum Beispiel das Löschen temporärer Dateien in mehreren Ordnern, das Umbenennen von Dateien nach einem bestimmten Muster, das Kopieren oder Verschieben von Inhalten, das Starten von Programmen in bestimmten Verzeichnissen oder das automatische Erstellen von Backups. Außerdem lassen sie sich problemlos in der Aufgabenplanung von Windows einbinden, um regelmäßig zu laufen.

Grundprinzip: BAT-Datei in einem bestimmten Ordner ausführen

Bevor Sie eine BAT-Datei in mehreren Ordnern ausführen, ist es wichtig zu verstehen, in welchem Verzeichnis die Befehle tatsächlich ausgeführt werden. Standardmäßig startet ein Batch-Skript im Verzeichnis, aus dem es aufgerufen wurde – nicht zwingend in dem Ordner, in dem es selbst liegt.

Deshalb empfiehlt sich der Befehl cd /d "%~dp0" am Anfang jeder BAT-Datei. Dadurch wechselt das Skript zunächst in sein eigenes Verzeichnis. Zudem gibt %~dp0 den vollständigen Pfad zur BAT-Datei zurück – also Laufwerk plus Ordnerpfad.

@echo off
cd /d "%~dp0"
echo Skript läuft in: %CD%
pause

Zusätzlich können Sie mit dem Befehl cd /d "C:\IhrPfad" direkt in einen beliebigen Ordner wechseln, bevor weitere Aktionen stattfinden.

Methode 1: BAT-Datei in mehreren Ordnern mit einer FOR-Schleife ausführen

Die eleganteste und am häufigsten verwendete Methode ist die FOR-Schleife in der Windows-Eingabeaufforderung. Sie erlaubt es, eine Liste von Ordnern zu durchlaufen und in jedem Verzeichnis dieselben Befehle auszuführen.

Variante A: Feste Ordnerliste

Wenn Sie genau wissen, welche Ordner bearbeitet werden sollen, können Sie diese direkt im Skript angeben:

@echo off
for %%d in (
    "C:\Ordner1"
    "C:\Ordner2"
    "D:\Projekte\Ordner3"
) do (
    echo Verarbeite: %%d
    cd /d %%d
    rem Hier Ihre Befehle einfügen, z.B.:
    dir /b *.txt
)
pause

Dabei steht %%d für die aktuelle Schleifenvariable – bei direktem Aufruf in der cmd.exe würde man stattdessen %d verwenden. Außerdem führen alle Anweisungen innerhalb der runden Klammern nach do die gewünschten Aktionen in jedem Ordner durch.

Variante B: Alle Unterordner eines Stammverzeichnisses automatisch durchlaufen

Noch praktischer ist es, wenn das Skript alle Unterordner eines bestimmten Stammverzeichnisses automatisch findet und durchläuft. Hierfür nutzen Sie den /D-Parameter der FOR-Schleife:

@echo off
set "STAMMORDNER=C:\MeineOrdner"
for /d %%d in ("%STAMMORDNER%\*") do (
    echo Verarbeite: %%d
    cd /d "%%d"
    rem Hier Ihre Befehle einfügen
    dir /b *.log
)
pause

Hierbei durchläuft das Skript automatisch alle direkten Unterordner von C:\MeineOrdner. Ebenso lässt sich der Stammordner über eine Variable (set "STAMMORDNER=...") leicht anpassen.

Methode 2: Rekursiv alle Unterordner durchlaufen mit /R

Wenn Sie nicht nur die direkte Unterebene, sondern alle tief verschachtelten Unterordner (also rekursiv) bearbeiten möchten, ergänzen Sie den Parameter /R:

@echo off
set "STAMMORDNER=C:\MeineOrdner"
for /R "%STAMMORDNER%" %%d in (.) do (
    echo Aktueller Ordner: %%d
    cd /d "%%~fd"
    rem Beispiel: alle TXT-Dateien im Ordner auflisten
    dir /b *.txt 2>nul
)
pause

Dabei steht %%~fd für den vollständigen, aufgelösten Pfad des aktuellen Verzeichnisses. Deshalb empfiehlt sich immer die Verwendung von %%~fd statt %%d, um Pfadprobleme mit Leerzeichen zu vermeiden.

Hinweis: Bei sehr tief verschachtelten Ordnerstrukturen kann ein rekursives Skript länger laufen. Testen Sie es daher zunächst mit einem kleinen Stammordner und fügen Sie echo-Ausgaben ein, um den Fortschritt zu verfolgen.

Methode 3: Ordnerliste aus einer Textdatei einlesen

Wenn Sie häufig wechselnde Ordner verarbeiten möchten, ohne das Skript jedes Mal zu bearbeiten, empfiehlt sich das Einlesen der Pfade aus einer externen Textdatei. Erstellen Sie dazu eine Datei namens ordner.txt mit einem Pfad pro Zeile:

C:\Projekte\Projekt1
C:\Projekte\Projekt2
D:\Backups\Archiv2025

Das Batch-Skript liest diese Datei dann zeilenweise ein:

@echo off
set "LISTENDATEI=C:\Skripte\ordner.txt"
for /F "usebackq tokens=* delims=" %%d in ("%LISTENDATEI%") do (
    echo Verarbeite: %%d
    cd /d "%%d"
    rem Hier Ihre Befehle einfügen
)
pause

Dabei ist usebackq wichtig, damit Pfade mit Leerzeichen korrekt verarbeitet werden. Außerdem sorgt tokens=* delims= dafür, dass die gesamte Zeile als ein Wert eingelesen wird – also kein unbeabsichtigtes Aufteilen bei Pfaden mit Sonderzeichen.

Methode 4: Übergabe von Ordnern als Argumente beim Skriptstart

Alternativ können Sie einer BAT-Datei beim Aufruf mehrere Ordner als Argumente übergeben. Das ist besonders nützlich, wenn Sie das Skript aus einem anderen Programm oder einem weiteren Batch-Skript heraus starten:

@echo off
rem Aufruf: meinskript.bat "C:\Ordner1" "C:\Ordner2" "D:\Ordner3"
:loop
if "%~1"=="" goto ende
echo Verarbeite: %~1
cd /d "%~1"
rem Hier Ihre Befehle einfügen
shift
goto loop
:ende
pause

Dabei verschiebt shift die Argumentliste um eine Position – deshalb verarbeitet das Skript nacheinander alle übergebenen Pfade. Zudem sorgt %~1 dafür, dass umgebende Anführungszeichen korrekt entfernt werden.

Methode 5: PowerShell als Alternative für komplexere Aufgaben

Für fortgeschrittene Anwendungsfälle empfiehlt sich PowerShell als leistungsfähige Alternative zu klassischen BAT-Dateien. PowerShell ist in Windows 10 und Windows 11 fest integriert und bietet deutlich mehr Möglichkeiten für die Verzeichnisverarbeitung.

Beispiel: BAT-Datei ruft PowerShell auf

Sie können aus einer BAT-Datei heraus einen PowerShell-Befehl ausführen:

@echo off
powershell -ExecutionPolicy Bypass -Command "Get-ChildItem -Path 'C:\MeineOrdner' -Directory | ForEach-Object { Set-Location $_.FullName; Write-Host 'Ordner:' $_.FullName; Get-ChildItem -Filter *.log }"
pause

Ebenso lässt sich ein separates PowerShell-Skript (.ps1) aus der BAT-Datei heraus starten:

@echo off
powershell -ExecutionPolicy Bypass -File "C:\Skripte\meineAufgabe.ps1"
pause

Somit kombinieren Sie die einfache Ausführbarkeit von BAT-Dateien mit der Leistungsfähigkeit von PowerShell. Jedoch sollten Sie beachten, dass die Ausführungsrichtlinie auf dem jeweiligen System den Start von PS1-Skripten einschränken kann.

Praktische Anwendungsbeispiele

Beispiel 1: Dateien in mehreren Ordnern löschen

Dieses Skript löscht alle .tmp-Dateien in einer Liste von Ordnern:

@echo off
for %%d in (
    "C:\Windows\Temp"
    "%LOCALAPPDATA%\Temp"
    "C:\Projektordner\Cache"
) do (
    if exist "%%d" (
        echo Bereinige: %%d
        del /Q /F "%%d\*.tmp" 2>nul
    )
)
echo Fertig.
pause

Dabei prüft if exist "%%d" vorab, ob der Ordner überhaupt vorhanden ist – deshalb schlägt das Skript nicht fehl, wenn ein Verzeichnis fehlt.

Beispiel 2: Dateien aus mehreren Ordnern in einen Zielordner kopieren

@echo off
set "ZIEL=D:\Gesammelt"
if not exist "%ZIEL%" mkdir "%ZIEL%"
for /d %%d in ("C:\Quellordner\*") do (
    echo Kopiere aus: %%d
    xcopy /Y /Q "%%d\*.pdf" "%ZIEL%\" 2>nul
)
echo Alle PDFs kopiert.
pause

Außerdem erstellt mkdir "%ZIEL%" den Zielordner automatisch, falls er noch nicht existiert.

Beispiel 3: Programm in mehreren Verzeichnissen ausführen

Manchmal soll ein bestimmtes Programm – zum Beispiel ein Komprimierungstool oder ein Konverter – in jedem Unterordner ausgeführt werden:

@echo off
for /d %%d in ("C:\Projekte\*") do (
    echo Verarbeite: %%d
    cd /d "%%d"
    "C:\Programme\MeinTool\tool.exe" --verarbeite .
)
pause

Wichtige Befehle und Variablen für BAT-Dateien mit Ordnern

Für die tägliche Arbeit mit Batch-Skripten und Verzeichnissen sind folgende Befehle und Variablen besonders nützlich:

cd /d "Pfad" – Wechselt das aktuelle Verzeichnis, auch laufwerksübergreifend. Ohne /d funktioniert der Wechsel zwischen verschiedenen Laufwerken nicht.

%CD% – Enthält das aktuell aktive Verzeichnis. Damit können Sie zur Kontrolle ausgeben, wo das Skript gerade arbeitet.

%~dp0 – Laufwerk und Pfad der BAT-Datei selbst. Deshalb ist diese Variable ideal, um relative Pfade vom Skript-Speicherort aus zu berechnen.

pushd / popd – Speichert das aktuelle Verzeichnis (pushd) und springt danach dorthin zurück (popd). Zusätzlich ermöglicht pushd auch das Einbinden von Netzwerkpfaden (\\Server\Freigabe) als temporäres Laufwerk.

if exist "Pfad" – Prüft vor dem Zugriff, ob ein Ordner oder eine Datei vorhanden ist. So vermeiden Sie Fehlermeldungen bei nicht existierenden Verzeichnissen.

2>nul – Unterdrückt Fehlermeldungen der Standardfehlerausgabe. Ebenso können Sie mit >nul auch die normale Ausgabe unterdrücken.

Häufige Fehler und ihre Lösung

Problem: Pfade mit Leerzeichen funktionieren nicht

Einer der häufigsten Fehler bei BAT-Dateien ist das fehlende Setzen von Anführungszeichen bei Pfaden, die Leerzeichen enthalten. Deshalb sollten Sie immer Pfade in doppelten Anführungszeichen schreiben: cd /d "C:\Mein Ordner mit Leerzeichen".

Problem: Schleifenvariable wird außerhalb der Klammer leer

Innerhalb eines for-Blocks mit Klammern werden Variablenwerte, die mit set geändert werden, nicht sofort sichtbar, da der Block vorab geparst wird. Lösung: Aktivieren Sie Delayed Expansion mit setlocal enabledelayedexpansion und verwenden Sie !Variable! statt %Variable%:

@echo off
setlocal enabledelayedexpansion
for /d %%d in ("C:\Ordner\*") do (
    set "AKTUELL=%%d"
    echo Aktuell: !AKTUELL!
)

Problem: Skript ändert Verzeichnis, kehrt aber nicht zurück

Wenn Sie innerhalb einer Schleife cd verwenden, bleibt das Skript im letzten Verzeichnis. Verwenden Sie stattdessen pushd / popd:

@echo off
for /d %%d in ("C:\Ordner\*") do (
    pushd "%%d"
    rem Befehle hier
    popd
)
pause

Problem: BAT-Datei findet keine Unterordner

Prüfen Sie, ob das Stammverzeichnis korrekt angegeben ist und ob tatsächlich Unterordner vorhanden sind. Außerdem kann ein Tippfehler im Pfad dazu führen, dass die Schleife einfach übersprungen wird – ohne Fehlermeldung.

BAT-Datei in der Aufgabenplanung für mehrere Ordner einrichten

Wenn Ihre BAT-Datei automatisch und regelmäßig mehrere Ordner verarbeiten soll, empfiehlt sich die Aufgabenplanung von Windows (Task Scheduler). So richten Sie einen automatischen Start ein:

Öffnen Sie zunächst die Aufgabenplanung über das Startmenü (Suche nach „Aufgabenplanung“). Wählen Sie dann „Einfache Aufgabe erstellen“ und vergeben Sie einen Namen. Legen Sie anschließend den Trigger fest – zum Beispiel täglich um 23 Uhr. Wählen Sie als Aktion „Programm starten“ und geben Sie den vollständigen Pfad zur BAT-Datei an, etwa C:\Skripte\meinskript.bat. Tragen Sie außerdem im Feld „Starten in“ den Ordner ein, in dem das Skript liegt, damit relative Pfade korrekt aufgelöst werden.

Empfehlung: Aktivieren Sie in den erweiterten Einstellungen der Aufgabe die Option „Mit höchsten Berechtigungen ausführen“, wenn das Skript auf geschützte Ordner wie C:\Windows zugreifen soll.

BAT-Datei vs. PowerShell: Was empfiehlt sich wann?

Für einfache Aufgaben wie das Durchlaufen von Ordnern und das Ausführen weniger Befehle sind BAT-Dateien die einfachere Wahl – sie laufen auf jedem Windows-System ohne zusätzliche Konfiguration. Jedoch stoßen sie bei komplexerer Logik, Fehlerbehandlung oder der Verarbeitung vieler Dateitypen schnell an ihre Grenzen.

Deshalb empfiehlt sich PowerShell für fortgeschrittene Automatisierungen, da es objektorientiert arbeitet, umfangreiche Fehlerbehandlung bietet und auch Remote-Systeme ansprechen kann. Ebenso lassen sich beide Welten kombinieren: Die BAT-Datei dient als Einstiegspunkt und startet bei Bedarf ein PowerShell-Skript.

BAT-Datei debuggen: Fehler gezielt finden

Beim Entwickeln von Batch-Skripten, die mehrere Ordner durchlaufen, sind folgende Debugging-Methoden hilfreich:

Entfernen Sie zunächst das @echo off am Anfang des Skripts – dadurch wird jeder Befehl vor seiner Ausführung in der Konsole angezeigt. Zusätzlich können Sie nach kritischen Befehlen echo Fehlercode: %ERRORLEVEL% einfügen, um zu prüfen, ob ein Befehl erfolgreich war (Rückgabewert 0) oder einen Fehler erzeugt hat (Rückgabewert ungleich 0). Außerdem eignet sich ein temporäres pause nach jedem Schleifendurchlauf, um den aktuellen Zustand zu überprüfen, bevor das Skript weiterläuft.

Sicherheit beim Ausführen von BAT-Dateien

BAT-Dateien sind mächtige Werkzeuge – deshalb sollten Sie grundlegende Sicherheitsregeln beachten. Führen Sie niemals BAT-Dateien aus unbekannten Quellen mit Administratorrechten aus. Prüfen Sie den Inhalt einer heruntergeladenen BAT-Datei stets in einem Texteditor – empfehlenswert ist Notepad++ (kostenlos, mit Syntaxhervorhebung), da er Fehler durch Einfärbung sichtbar macht. Außerdem empfiehlt sich das Testen neuer Skripte zunächst in einem Testordner mit unkritischen Daten.

Ebenso sollten Sie bei Skripten, die Dateien löschen oder überschreiben, eine Sicherheitsabfrage einbauen:

@echo off
set /p BESTAETIGUNG=Wirklich fortfahren? (J/N): 
if /i not "%BESTAETIGUNG%"=="J" (
    echo Abgebrochen.
    exit /b
)

Häufige Fragen zu BAT-Dateien und Ordnern

Wie führe ich eine BAT-Datei als Administrator in mehreren Ordnern aus?

Klicken Sie mit der rechten Maustaste auf die BAT-Datei und wählen Sie „Als Administrator ausführen“. Alternativ können Sie in der Aufgabenplanung die Option „Mit höchsten Berechtigungen ausführen“ aktivieren. Für die automatische Ausführung mit Adminrechten ohne UAC-Dialog muss die Aufgabe unter einem Administratorkonto eingerichtet werden.

Warum erkennt mein Batch-Skript Pfade mit Leerzeichen nicht?

Der häufigste Grund ist das Fehlen von Anführungszeichen. Schreiben Sie Pfade immer in der Form "C:\Mein Ordner". Innerhalb von FOR-Schleifen verwenden Sie "%%d" statt %%d. Zudem verhindert die Verwendung von %~1 statt %1 Probleme bei als Argument übergebenen Pfaden.

Wie kann ich eine BAT-Datei nur in bestimmten Unterordnern ausführen?

Nutzen Sie eine if-Abfrage innerhalb der FOR-Schleife. Zum Beispiel können Sie den Ordnernamen mit %%~nxd auslesen und ihn mit if "%%~nxd"=="gewuenscht" vergleichen. Ebenso lassen sich Ordner anhand von Namensmustern filtern: for /d %%d in ("C:\Ordner\Projekt*") durchläuft nur Ordner, die mit „Projekt“ beginnen.

Wie stoppe ich eine laufende BAT-Datei, die mehrere Ordner durchläuft?

Drücken Sie in der geöffneten Eingabeaufforderung die Tastenkombination Strg + C. Windows fragt dann, ob der Batch-Vorgang beendet werden soll – bestätigen Sie mit „J“. Außerdem können Sie das Konsolenfenster direkt schließen oder den Prozess cmd.exe im Task-Manager beenden.

Wie führe ich eine BAT-Datei rekursiv in allen Unterordnern aus?

Verwenden Sie for /R "Stammordner" %%d in (.) do .... Der Parameter /R sorgt dafür, dass alle Unterordner auf allen Ebenen durchlaufen werden. Mit %%~fd erhalten Sie den vollständigen absoluten Pfad des jeweiligen Verzeichnisses.

Kann ich eine BAT-Datei in einem Netzwerkordner ausführen?

Ja. Verwenden Sie dafür pushd \\Server\Freigabe\Ordner statt cd, da pushd UNC-Pfade (Netzwerkpfade) automatisch als temporäres Laufwerk einbindet. Mit popd wird die Verbindung danach wieder getrennt. Stellen Sie außerdem sicher, dass Sie die notwendigen Zugriffsrechte auf den Netzwerkordner besitzen.

Warum wird meine Variable innerhalb der FOR-Schleife nicht aktualisiert?

Das liegt am Parsing-Verhalten von cmd.exe: Variablen werden einmalig beim Einlesen des Blocks ausgewertet. Lösung: Aktivieren Sie Delayed Expansion mit setlocal enabledelayedexpansion am Skriptanfang und verwenden Sie innerhalb der Schleife !VARIABLENNAME! statt %VARIABLENNAME%.

Wie protokolliere ich die Ausgabe einer BAT-Datei beim Verarbeiten mehrerer Ordner?

Leiten Sie die Ausgabe in eine Logdatei um: Hängen Sie >> "C:\log.txt" an Ihre Befehle. Mit >> (doppeltes Größer-als-Zeichen) wird die Ausgabe an die Datei angehängt statt überschrieben. Außerdem können Sie mit echo %DATE% %TIME%: Ordner %%d >> log.txt jeden Schritt mit Zeitstempel protokollieren.

Wie übergebe ich Variablen zwischen einer BAT-Datei und einem aufgerufenen Skript?

Nutzen Sie Umgebungsvariablen oder Argumente. Mit call meinskript.bat "%VARIABLE%" übergeben Sie Werte als Argument. Alternativ können Sie Variablen mit set "VARIABLE=Wert" setzen, bevor Sie das andere Skript mit call aufrufen – vorausgesetzt, es läuft im selben cmd-Prozess.

Welche Editoren eignen sich zum Erstellen von BAT-Dateien?

Empfehlenswert ist Notepad++ (kostenlos, mit Syntaxhervorhebung für Batch-Skripte), da er Fehler durch Einfärbung sichtbar macht. Ebenso bietet Visual Studio Code mit der Erweiterung „Batch Snippets“ gute Unterstützung. Der einfache Windows-Editor (Notepad) funktioniert grundsätzlich auch, bietet jedoch keine Syntaxunterstützung. Wichtig: Speichern Sie die Datei immer mit der Endung .bat und nicht als .bat.txt.

Fazit

Eine BAT-Datei, die mehrere Ordner durchläuft, lässt sich in Windows 10 und Windows 11 mit wenigen Zeilen umsetzen. FOR-Schleifen sind dabei das zentrale Werkzeug – ob mit fester Ordnerliste, automatischem Scan der Unterordner oder rekursivem Durchlauf.

Für komplexere Anforderungen lohnt sich der Wechsel zu PowerShell oder die Kombination beider Technologien. Deshalb starten Sie am besten mit einem einfachen Testskript und erweitern es schrittweise.