batch-file
Dla pętli w plikach wsadowych
Szukaj…
Składnia
- dla / l %% p w (startNumber, increment, endNumber) wykonaj polecenie
- dla / f %% p w (nazwa pliku) wykonaj polecenie
- dla / f %% p w („textStrings”) wykonaj polecenie
- dla / f %% p w („polecenie”) wykonaj polecenie
- dla / r dysk: \ ścieżka %% p w (set) do polecenia
- dla / d %% p w (katalogu) wykonaj polecenie
Uwagi
Polecenie for
akceptuje opcje, gdy używana jest flaga /f
. Oto lista opcji, których można użyć:
delims=x
Znak (y)delims=x
do oddzielania tokenówskip=n
Liczba linii, które należy pominąć na początku ciągów plików i tekstóweol=;
Znak na początku każdej linii oznacza komentarztokens=n
Pozycje numerowane do odczytania z każdego wiersza lub ciągu do przetworzeniausebackq
Użyj innego stylu cytowania:Używaj podwójnych cudzysłowów dla długich nazw plików w „plikach”
Użyj pojedynczych cudzysłowów dla „textStrings”
Użyj cudzysłowów dla `command`
Pętla przez każdą linię w zestawie plików
Następujące echa każdej linii w pliku C:\scripts\testFile.txt
. Puste linie nie będą przetwarzane.
for /F "tokens=*" %%A in (C:\scripts\testFile.txt) do (
echo %%A
rem do other stuff here
)
Bardziej zaawansowany przykład pokazuje, w jaki sposób dane pochodzące z pętli FOR z danych zestawu plików zastrzeżonych można wykorzystać do przekierowania wykonania wsadowego, zapisując jednocześnie przeszukaną zawartość do pliku:
@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
Zauważ, jak długo ciągi poleceń są podzielone na kilka linii kodu, a grupy poleceń są oddzielone nawiasami.
Rekurencyjnie odwiedzaj katalogi w drzewie katalogów
Komendy for /r
można używać do rekurencyjnego odwiedzania wszystkich katalogów w drzewie katalogów i wykonywania poleceń.
@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
)
Uwagi:
- for / r - Pętla przez pliki (podfoldery Recurse).
- pushd - Zmień bieżący katalog / folder i zapisz poprzedni folder / ścieżkę do użycia przez polecenie POPD.
- popd - Zmień katalog z powrotem na ścieżkę / folder ostatnio przechowywany przez polecenie PUSHD.
Zmiana nazwy wszystkich plików w bieżącym katalogu
Poniżej zastosowano zmienną z pętlą for
do zmiany nazwy grupy plików.
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"
)
Definiując nazwę zmiennej %%j
i kojarząc ją ze wszystkimi bieżącymi plikami (*.*)
, Możemy użyć zmiennej w pętli for
do reprezentowania każdego pliku w bieżącym katalogu.
Każda iteracja (lub przejście) przez pętlę przetwarza w ten sposób inny plik niż zdefiniowana grupa (która może być równie dowolną grupą, np. *.jpg
lub *.txt
).
W pierwszym przykładzie zastępujemy tekst: ciąg tekstowy „stary” jest zastępowany ciągiem tekstowym „nowy” (jeśli, ale tylko jeśli tekst „stary” jest obecny w nazwie pliku).
W drugim przykładzie dodajemy tekst: tekst „Prefiks” jest dodawany na początku nazwy pliku. To nie jest zamiana. Ta zmiana zostanie zastosowana do wszystkich plików w grupie.
W trzecim przykładzie ponownie dodajemy tekst: tekst „Sufiks” jest dodawany na końcu nazwy pliku. Znów nie jest to zamiana. Ta zmiana zostanie zastosowana do wszystkich plików w grupie.
Ostatnia linia faktycznie obsługuje zmianę nazwy.
Iteracja
for /L %%A in (1,2,40) do echo %%A
Ta linia będzie iterować od 1 do 39, zwiększając za każdym razem o 2.
Pierwszy parametr, 1
, jest numerem początkowym.
Drugi parametr, 2
, jest przyrostem.
Trzeci parametr, 40
, jest wartością maksymalną.