%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 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.
| 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 |
%* können Sie alle Argumente an ein anderes Programm oder eine andere Batch-Datei weitergeben – ideal für Wrapper-Skripte.
Pfad-Erweiterungen ermöglichen es, Teile eines Pfades zu extrahieren – besonders nützlich für relative Pfade und Dateioperationen.
| 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 |
%~dp0 ist besonders nützlich, um auf Dateien im gleichen Verzeichnis wie die Batch-Datei zu verweisen, unabhängig vom aktuellen Arbeitsverzeichnis.
SET definiert und zeigt Umgebungsvariablen an. SETLOCAL und ENDLOCAL begrenzen die Sichtbarkeit von Variablen auf den aktuellen Block.
| 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) |
SETLOCAL am Anfang Ihrer Batch-Datei, um zu verhindern, dass Variablen die aufrufende Umgebung beeinflussen.
IF ermöglicht bedingte Ausführungen in Batch-Dateien – zum Prüfen von Argumenten, Dateien oder Fehlercodes.
| 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 |
%1 bei Vergleichen ("%1"), um Probleme mit leeren Argumenten zu vermeiden.
FOR führt Schleifen in Batch-Dateien aus – über Dateien, Verzeichnisse, Textzeilen oder Zahlenbereiche. %% wird in Batch-Dateien verwendet (im CMD direkt nur %).
| 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) |
FOR %%i IN (1 2 3) DO ECHO %%i:%% für Variablen, am CMD-Prompt nur %. Mit FOR /F "delims=" %%i IN (datei.txt) DO ... lesen Sie ganze Zeilen inklusive Leerzeichen.
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.
| 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 |
CALL :sub ruft eine Subroutine auf, GOTO :EOF beendet sie. Ohne CALL springt GOTO direkt zur Subroutine und kehrt nicht zurück.
%1
%~dp0
SET
IF
FOR
CALL
IF "%1"=="" GOTO :help ·
FOR %%f IN (*.txt) DO ECHO %%f ·
CALL :sub %1 %2