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ów

  • skip=n Liczba linii, które należy pominąć na początku ciągów plików i tekstów

  • eol=; Znak na początku każdej linii oznacza komentarz

  • tokens=n Pozycje numerowane do odczytania z każdego wiersza lub ciągu do przetworzenia

  • usebackq 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ą.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow