CMD Batch-Scripting

6 Kernkonzepte
Die wichtigsten Konzepte für Batch-Dateien unter Windows CMD: %1, %2 · %~dp0 · SET · IF · FOR · CALL Batch-Scripting ist die klassische Automatisierung unter Windows. Diese Konzepte sind essenziell für die Erstellung von .bat-Dateien zur Verwaltung von Dateien, Benutzern und Systemaufgaben.

Positionsparameter – %1, %2, ...

%1, %2, ..., %*
script.bat arg1 arg2 %1 = arg1, %2 = arg2

Positionsparameter sind die Argumente, die einer Batch-Datei beim Aufruf übergeben werden. %1 ist das erste Argument, %2 das zweite, usw. %* enthält alle Argumente als einen String.

Wichtige Spezialvariablen

Variable Beschreibung
%0 Name der Batch-Datei
%1, %2, ... Positionsparameter (bis %9)
%* Alle Argumente als einzelner String
%~dp0 Laufwerk + Pfad der Batch-Datei
%~nx0 Dateiname + Erweiterung der Batch-Datei
Beispiele
@echo off
echo "Skript: %0"
echo "Erstes Argument: %1"
echo "Zweites Argument: %2"
echo "Alle Argumente: %*"
Aufruf: script.bat hallo welt
Skript: script.bat
Erstes Argument: hallo
Zweites Argument: welt
Alle Argumente: hallo welt
Tipp: Mit %* können Sie alle Argumente an ein anderes Programm oder eine andere Batch-Datei weitergeben – ideal für Wrapper-Skripte.

Pfad-Erweiterungen – %~dp0, %~nx1

%~dp0 · %~nx1 · %~f1
%~dp0 # Laufwerk + Pfad der Batch-Datei %~f1 # Vollständiger Pfad des ersten Arguments %~nx1 # Dateiname + Erweiterung des ersten Arguments

Pfad-Erweiterungen ermöglichen es, Teile eines Pfades zu extrahieren – besonders nützlich für relative Pfade und Dateioperationen.

Häufige Erweiterungen

Erweiterung Beschreibung
%~dp0 Laufwerk + Pfad der Batch-Datei (mit "\" am Ende)
%~nx0 Dateiname + Erweiterung der Batch-Datei
%~f1 Vollständiger Pfad des ersten Arguments
%~d1 Laufwerk des ersten Arguments
%~p1 Pfad (ohne Laufwerk) des ersten Arguments
%~n1 Dateiname (ohne Erweiterung) des ersten Arguments
%~x1 Erweiterung des ersten Arguments
%~sn1 Kurzer 8.3-Name des ersten Arguments
Beispiele
@echo off
echo "Batch-Pfad: %~dp0"
echo "Batch-Name: %~nx0"
echo "Argument-Pfad: %~f1"
echo "Argument-Name: %~nx1"
Aufruf: C:\temp\script.bat ..\datei.txt
Batch-Pfad: C:\temp\
Batch-Name: script.bat
Argument-Pfad: C:\datei.txt
Argument-Name: datei.txt
Tipp: %~dp0 ist besonders nützlich, um auf Dateien im gleichen Verzeichnis wie die Batch-Datei zu verweisen, unabhängig vom aktuellen Arbeitsverzeichnis.

Variablen – SET, %VAR%, SETLOCAL

SET name=wert · %name% · SETLOCAL
SET name=wert SET name= # Löschen der Variable SETLOCAL & ENDLOCAL # Lokaler Scope

SET definiert und zeigt Umgebungsvariablen an. SETLOCAL und ENDLOCAL begrenzen die Sichtbarkeit von Variablen auf den aktuellen Block.

Häufige Verwendungen

Befehl Beschreibung
SET name=wert Variable definieren
SET name= Variable löschen
%name% Wert der Variable verwenden
SETLOCAL Beginnt lokalen Variablen-Scope
ENDLOCAL Beendet lokalen Variablen-Scope
SET /a zahl=5+3 Arithmetik (Zahlen)
Beispiele
SETLOCAL
SET name=Welt
SET greeting=Hallo
echo %greeting% %name%!
SET /a zahl=10+5
echo Zahl: %zahl%
ENDLOCAL
Hallo Welt!
Zahl: 15
Tipp: Verwenden Sie SETLOCAL am Anfang Ihrer Batch-Datei, um zu verhindern, dass Variablen die aufrufende Umgebung beeinflussen.

IF – Bedingungen prüfen

IF [NOT] Bedingung Befehl
IF "%1" == "" GOTO :help IF EXIST datei.txt DEL datei.txt IF %ERRORLEVEL% NEQ 0 ECHO Fehler!

IF ermöglicht bedingte Ausführungen in Batch-Dateien – zum Prüfen von Argumenten, Dateien oder Fehlercodes.

Häufige IF-Varianten

Syntax Beschreibung
IF "%1"=="" GOTO :label Prüft, ob Argument 1 leer ist
IF EXIST datei.txt DEL datei.txt Prüft, ob Datei existiert
IF NOT EXIST datei.txt ECHO Nicht da Prüft, ob Datei nicht existiert
IF %ERRORLEVEL% NEQ 0 ECHO Fehler Prüft Fehlercode (NEQ = not equal)
IF /I "%1"=="-v" ECHO Verbose /I ignoriert Groß-/Kleinschreibung
IF DEFINED VAR ECHO Var existiert Prüft, ob Variable definiert ist
Beispiele
@echo off
IF "%1" == "" GOTO :help
IF EXIST %1 GOTO :exist
echo Datei existiert nicht.
GOTO :ende
:exist
echo Datei %1 existiert.
GOTO :ende
:help
echo Verwendung: %0 [dateiname]
:ende
Tipp: Verwenden Sie immer Anführungszeichen um %1 bei Vergleichen ("%1"), um Probleme mit leeren Argumenten zu vermeiden.

FOR – Schleifen

FOR %%var IN (liste) DO befehl
FOR %%i IN (*.txt) DO ECHO %%i FOR /F "delims=" %%i IN (datei.txt) DO ECHO %%i

FOR führt Schleifen in Batch-Dateien aus – über Dateien, Verzeichnisse, Textzeilen oder Zahlenbereiche. %% wird in Batch-Dateien verwendet (im CMD direkt nur %).

Häufige FOR-Varianten

Syntax Beschreibung
FOR %%i IN (1 2 3) DO ... Über eine Liste von Werten
FOR %%i IN (*.txt) DO ... Über alle .txt-Dateien
FOR /R %%i IN (*.log) DO ... Rekursiv (Unterverzeichnisse)
FOR /D %%i IN (*) DO ... Über Verzeichnisse (nicht Dateien)
FOR /F "delims=" %%i IN (datei.txt) DO ... Zeilen aus Datei lesen
FOR /L %%i IN (1,1,10) DO ... Zahlenbereich (Start, Schritt, Ende)
Beispiele
Dateien auflisten:
FOR %%f IN (*.txt) DO echo %%f
Dateien mit Unterverzeichnissen:
FOR /R %%f IN (*.log) DO echo %%f
Zeilen aus Datei verarbeiten:
FOR /F "delims=" %%i IN (liste.txt) DO echo %%i
Zahlenbereich 1 bis 10:
FOR /L %%i IN (1,1,10) DO echo %%i
Ausgabe von FOR %%i IN (1 2 3) DO ECHO %%i:
1
2
3
Tipp: In Batch-Dateien verwenden Sie %% für Variablen, am CMD-Prompt nur %. Mit FOR /F "delims=" %%i IN (datei.txt) DO ... lesen Sie ganze Zeilen inklusive Leerzeichen.

CALL – Subroutinen aufrufen

CALL :label · CALL andere.bat
CALL :subroutine CALL andere.bat GOTO :EOF # Ende der Subroutine

CALL ruft eine Subroutine (Label) innerhalb der Batch-Datei auf oder führt eine andere Batch-Datei aus. Nach der Rückkehr wird der nächste Befehl ausgeführt.

Wichtige Konzepte

Befehl Beschreibung
CALL :label Subroutine aufrufen (Label muss mit ":" beginnen)
GOTO :EOF Springt zum Ende der Datei (beendet Subroutine)
CALL andere.bat Andere Batch-Datei ausführen
CALL andere.bat %* Alle Argumente an andere.bat weitergeben
Beispiele
@echo off
echo Hauptprogramm
CALL :sub Hallo Welt
echo Zurück im Hauptprogramm
GOTO :ende
:sub
echo Subroutine: %1 %2
GOTO :EOF
:ende
echo Fertig.
Hauptprogramm
Subroutine: Hallo Welt
Zurück im Hauptprogramm
Fertig.
Tipp: CALL :sub ruft eine Subroutine auf, GOTO :EOF beendet sie. Ohne CALL springt GOTO direkt zur Subroutine und kehrt nicht zurück.

CMD Batch-Scripting im Überblick

%1-%9 Positionsparameter
%1 erstes Argument
%~dp0 Pfad der Batch-Datei
Laufwerk + Pfad
%* Alle Argumente
Als ein String
SET Variablen definieren
%VAR% verwenden
IF Bedingungen prüfen
EXIST, ERRORLEVEL, ==
FOR Schleifen
Dateien, Zeilen, Zahlen

Quick Summary

%1
Positionsparameter
%~dp0
Batch-Pfad
SET
Variablen
IF
Bedingungen
FOR
Schleifen
CALL
Subroutinen
IF "%1"=="" GOTO :help · FOR %%f IN (*.txt) DO ECHO %%f · CALL :sub %1 %2