batch-file
Für Loops in Stapeldateien
Suche…
Syntax
- für / l %% p in (Startnummer, Inkrement, Endnummer) do-Befehl
- für / f %% p in (Dateiname) do Befehl
- for / f %% p in ("textStrings") do-Befehl
- für / f %% p in ('command') do-Befehl
- für / r Laufwerk: \ Pfad %% p in (set) do Befehl
- für / d %% p in (Verzeichnis) do Befehl
Bemerkungen
Der Befehl for
akzeptiert Optionen, wenn das Flag /f
verwendet wird. Hier ist eine Liste von Optionen, die verwendet werden können:
delims=x
, um Token zu trennenskip=n
Anzahl der Zeilen, die am Anfang von Datei- und Textzeichenfolgen übersprungen werdeneol=;
Zeichen am Anfang jeder Zeile, um einen Kommentar anzugebentokens=n
Nummerierte Elemente, die aus jeder zu verarbeitenden Zeile oder Zeichenfolge gelesen werden sollenusebackq
Verwenden Sie einen anderenusebackq
:Verwenden Sie doppelte Anführungszeichen für lange Dateinamen in "Dateien".
Verwenden Sie einfache Anführungszeichen für 'textStrings'.
Verwenden Sie wieder Anführungszeichen für `command`
Durchlaufen jeder Zeile in einem Dateisatz
Im Folgenden wird jede Zeile in der Datei C:\scripts\testFile.txt
. Leere Zeilen werden nicht verarbeitet.
for /F "tokens=*" %%A in (C:\scripts\testFile.txt) do (
echo %%A
rem do other stuff here
)
Ein fortschrittlicheres Beispiel zeigt, wie die in FOR-Schleife aus einem Datensatz mit eingeschränkten Dateien abgeleiteten Daten verwendet werden können, um die Batch-Ausführung umzuleiten und gleichzeitig den gesuchten Inhalt in einer Datei zu speichern:
@echo off
setlocal enabledelayedexpansion
for /f %%i in ('dir "%temp%\test*.log" /o:-d /t:w /b') do (
set "last=%temp%\%%i"
type !last! | find /n /i "Completed" >nul 2>&1 >> %temp%\Completed.log ^
&& (echo Found in log %%i & goto :end) || (echo Not found in log %%i & set "result=1"))
:: add user tasks code here
if defined result echo Performing user tasks...
:end
echo All tasks completed
exit /b
Beachten Sie, wie lange Befehlszeichenfolgen in mehrere Codezeilen aufgeteilt werden und Befehlsgruppen durch Klammern getrennt werden.
Besuche rekursiv Verzeichnisse in einer Verzeichnisstruktur
for /r
Befehl for /r
kann verwendet werden, um rekursiv alle Verzeichnisse in einer Verzeichnisstruktur aufzurufen und einen Befehl auszuführen.
@echo off
rem start at the top of the tree to visit and loop though each directory
for /r %%a in (.) do (
rem enter the directory
pushd %%a
echo In directory:
cd
rem leave the directory
popd
)
Anmerkungen:
- for / r - Durchlaufen von Dateien (Unterordner Recurse).
- pushd - Ändert das aktuelle Verzeichnis / den Ordner und speichert den vorherigen Ordner / Pfad zur Verwendung durch den POPD-Befehl.
- popd - Wechseln Sie in das Verzeichnis, das zuletzt vom Befehl PUSHD gespeichert wurde.
Alle Dateien im aktuellen Verzeichnis umbenennen
Im Folgenden wird eine Variable mit einer for
Schleife verwendet, um eine Gruppe von Dateien umzubenennen.
SetLocal EnableDelayedExpansion
for %%j in (*.*) do (
set filename=%%~nj
set filename=!filename:old=new!
set filename=Prefix !filename!
set filename=!filename! Suffix
ren "%%j" "!filename!%%~xj"
)
Indem Sie den Variablennamen %%j
und ihn allen aktuellen Dateien (*.*)
%%j
, können wir die Variable in einer for
Schleife verwenden, um jede Datei im aktuellen Verzeichnis darzustellen.
Bei jedem Durchlauf (oder Durchlauf) der Schleife wird dabei eine andere Datei als die definierte Gruppe verarbeitet (die ebenfalls eine beliebige Gruppe sein könnte, z. B. *.jpg
oder *.txt
).
Im ersten Beispiel ersetzen wir Text: Die Textzeichenfolge "old" wird durch die Textzeichenfolge "new" ersetzt (wenn, jedoch nur, wenn im Dateinamen der Text "old" enthalten ist).
Im zweiten Beispiel fügen wir Text hinzu: Der Text "Prefix" wird am Anfang des Dateinamens eingefügt. Dies ist kein Ersatz. Diese Änderung wird auf alle Dateien in der Gruppe angewendet.
Im dritten Beispiel fügen wir erneut Text hinzu: Der Text "Suffix" wird am Ende des Dateinamens hinzugefügt. Auch dies ist keine Substitution. Diese Änderung wird auf alle Dateien in der Gruppe angewendet.
Die letzte Zeile übernimmt eigentlich die Umbenennung.
Iteration
for /L %%A in (1,2,40) do echo %%A
Diese Zeile wird von 1 bis 39 iteriert und jedes Mal um 2 erhöht.
Der erste Parameter, 1
, ist die Startnummer.
Der zweite Parameter, 2
, ist das Inkrement.
Der dritte Parameter, 40
, ist der Maximalwert.