- 1 Abschnitt
- 15 Lektionen
- Um den Kurs in deinem Profil zu hinterlegen klicke oben auf Starten
- Kommandozeile (CMD)16
- 1.1Einstieg & Arbeitsweise
- 1.2Navigieren im Dateisystem
- 1.3Pfade, Wildcards und Quoting
- 1.4Umgebungsvariablen und der PATH
- 1.5Ein- und Ausgabe, Pipes und Umleitungen
- 1.6Suchen, Vergleichen und Archivieren
- 1.7Prozesse, Dienste und Systeminformationen
- 1.8Netzwerk-Basics und Troubleshooting
- 1.9Rechte, ACLs und Dateiattribute
- 1.10Batch-Grundlagen und Automatisierung
- 1.11Aufgaben planen und Startparameter
- 1.12Fehlerbehandlung, Logs und Debugging
- 1.13Erweiterte Batch-Techniken – FOR /F, String-Operationen und Menüführung
- 1.14Aufgaben
- 1.15Lösungen
- 1.16Kommandozeile (CMD)14 Fragen
Fehlerbehandlung, Logs und Debugging
Ein gutes Script sollte nicht nur im Idealfall funktionieren, sondern auch dann sinnvoll reagieren, wenn etwas schiefgeht –
z. B. wenn eine Datei fehlt, ein Netzlaufwerk nicht erreichbar ist oder ein Befehl fehlschlägt.
Ziel ist es, dass das Script nicht einfach abbricht, sondern:
erkennt, was passiert ist,
es dokumentiert,
und wenn möglich, eine kontrollierte Aktion ausführt.
Batch-Dateien bieten dafür drei Hauptmechanismen:
Errorlevel – Rückgabewerte von Befehlen
Log-Dateien – Ausgaben protokollieren
Debugging-Ausgaben – nachvollziehen, was im Script passiert
Errorlevel: den Erfolg eines Befehls prüfen
Fast jeder Befehl gibt nach seiner Ausführung einen Errorlevel zurück.
0→ Erfolg1oder höher → Fehler
So kannst du direkt prüfen, ob ein Befehl funktioniert hat:
copy daten.txt d:\backup\
if errorlevel 1 (
echo Fehler beim Kopieren!
) else (
echo Datei erfolgreich kopiert.
)
Manche Befehle verwenden spezielle Werte:
z. B. find → 0 = gefunden, 1 = nicht gefunden, 2 = Fehler.
Beispiel:
find "Fehler" log.txt >nul
if errorlevel 1 echo Keine Fehler gefunden.
|| und && – Kurzformen für Erfolg/Fehler
In modernen Batch-Dateien kannst du && und || verwenden, um direkt auf Erfolg oder Misserfolg zu reagieren:
xcopy daten.txt d:\backup\ && echo OK || echo Fehler!
Das bedeutet:
Wenn
xcopyerfolgreich war → führe den Befehl nach&&ausWenn es fehlschlägt → führe den Befehl nach
||aus
So kannst du Einzeiler schreiben, die sauber reagieren.
Logs schreiben (Protokolle)
Bei längeren Skripten ist es sinnvoll, jede Aktion zu protokollieren – z. B. mit Datum und Uhrzeit.
@echo off
set "LOG=C:\Logs\backup_%DATE%.log"
echo ===== Backup gestartet am %DATE% %TIME% ===== >> "%LOG%"
xcopy "C:\Daten" "D:\Backup" /E /I /Y >> "%LOG%" 2>>&1
if errorlevel 1 (
echo Fehler beim Kopieren >> "%LOG%"
) else (
echo Backup erfolgreich abgeschlossen >> "%LOG%"
)
echo ===== Ende ===== >> "%LOG%"
Erklärung:
>>hängt die Ausgabe an (überschreibt nicht)2>>&1leitet Fehlerausgaben in dieselbe Logdatei um%DATE%und%TIME%geben dir Zeitstempel
Damit kannst du später genau nachvollziehen, was wann passiert ist.
Fehlerbehandlung in größeren Scripts
Ein gut strukturiertes Script verwendet Labels und Sprünge zur zentralen Fehlerbehandlung.
@echo off
set "ZIEL=D:\Backup"
if not exist "%ZIEL%" goto fehler
echo Starte Kopiervorgang...
copy C:\daten.txt "%ZIEL%"
if errorlevel 1 goto fehler
echo Alles erfolgreich!
goto ende
:fehler
echo Fehler aufgetreten! >> fehler.log
exit /b 1
:ende
echo Fertig.
exit /b 0
Das Script springt bei Problemen automatisch zu :fehler und beendet sich sauber mit einem Rückgabewert (Errorlevel).
So kannst du den Exit-Code später im Aufgabenplaner oder von anderen Scripts auswerten.
Temporäre Logs und Debug-Ausgaben
Wenn du ein Script entwickelst, kannst du dir gezielt Debug-Ausgaben einbauen.
Beispiel:
set DEBUG=1
if "%DEBUG%"=="1" echo [DEBUG] Starte Kopiervorgang...
So kannst du mit einem einzigen Schalter zwischen “leise” und “ausführlich” umschalten.
Oder du nutzt call :log als eigene Funktion:
@echo off
set "LOG=C:\Logs\debug.log"
call :log "Script gestartet"
:: ... dein Code ...
call :log "Script beendet"
exit /b
:log
echo [%TIME%] %~1 >> "%LOG%"
exit /b
Damit bekommst du ein chronologisch geordnetes Log mit Zeitstempeln – ein Klassiker in der Praxis.
Häufige Problemfälle und Lösungen
| Symptom | Ursache | Lösung |
|---|---|---|
| Script bricht ohne Meldung ab | kein Errorlevel geprüft | if errorlevel oder ` |
| Logdatei leer | Pfad nicht in Anführungszeichen | "C:\Logs\..." verwenden |
%TIME% enthält Doppelpunkte → Fehler im Dateinamen | Zeitstempel vorher bereinigen | set DATUM=%DATE:/=-% |
| Schleifenfehler bei fehlenden Dateien | for läuft in leeres Set | if exist prüfen |
| Aufgabenplaner zeigt Fehlercode 1 | Script liefert Fehlerlevel 1 zurück | prüfen, wo Fehler ausgelöst wurde |
Beispiel: robustes automatisches Backup mit Logging
@echo off
setlocal
set "SRC=C:\Daten"
set "DST=D:\Backup"
set "LOG=%DST%\backup_%DATE:/=-%.log"
echo [%TIME%] Starte Sicherung >> "%LOG%"
if not exist "%DST%" (
mkdir "%DST%" || (
echo [%TIME%] Fehler: Ziel konnte nicht erstellt werden >> "%LOG%"
exit /b 1
)
)
xcopy "%SRC%\*" "%DST%\" /E /I /Y >> "%LOG%" 2>>&1
if errorlevel 1 (
echo [%TIME%] Fehler beim Kopieren >> "%LOG%"
exit /b 2
)
echo [%TIME%] Sicherung erfolgreich beendet >> "%LOG%"
endlocal
exit /b 0
Was hier passiert:
Jeder Schritt wird ins Log geschrieben.
Fehler erzeugen gezielte Exit-Codes (1=Ordnerfehler, 2=Kopierfehler).
Der Aufgabenplaner oder ein Admin sieht sofort, wo das Script gescheitert ist.
Debugging-Tipps
Schrittweise testen – komplexe Schleifen oder Pfade einzeln prüfen.
Echo aktivieren –
echo onzeigt jeden ausgeführten Befehl.Pausen einbauen –
timeout /t 3hilft, bei schneller Ausführung mitzulesen.Variablen prüfen –
echo %VARIABLENNAME%zwischendurch einfügen.Zwischenergebnisse loggen – Zeitstempel mit
%TIME%in Log schreiben.
Beispiel:
@echo on
set PFAD=C:\Test
echo [DEBUG] Pfad ist: %PFAD%
pause
