Jak zapętlić plik wsadowy systemu Windows?

170

Jaka jest składnia pętli FOR w pliku wsadowym systemu Windows?

Pradeep
źródło

Odpowiedzi:

128
FOR %%A IN (list) DO command parameters

lista to lista dowolnych elementów, oddzielonych spacjami, przecinkami lub średnikami.

Polecenie może być dowolnym poleceniem wewnętrznym lub zewnętrznym, plikiem wsadowym lub nawet - w systemach OS / 2 i NT - listą poleceń

parametry zawiera parametry wiersza polecenia polecenia. W tym przykładzie polecenie zostanie wykonane raz dla każdego elementu na liście, używając parametrów, jeśli zostały określone.

Specjalnym typem parametru (a nawet polecenia) jest %% A, który będzie zastępowany kolejno przez każdy element z listy.

Z pętli FOR

rahul
źródło
3
Czy mogę podać zakres (od 1 do 100) na liście?
Pradeep
36
FOR /L %x IN (1,1,100) DO ...
Joey
umieść pareny, [ parameters ]jeśli chcesz uwzględnić wiele linii w swojej forpętli
Frank Bryce
1
@aaiezza, popieram twoją opinię. Walczę teraz z tymi cholernymi pętlami, działając zupełnie nieoczekiwanie i nie mam pojęcia, co kontroluje cokolwiek patrząc na wyjście. Okropne rzeczy. Przydatne, ale okropne.
RockDoctor
223

Jeśli chcesz coś zrobić x razy, możesz to zrobić:

Przykład (x = 200):

FOR /L %%A IN (1,1,200) DO (
  ECHO %%A
)

1,1,200 znaczy:

  • Start = 1
  • Przyrost na krok = 1
  • Koniec = 200
vancoeverden
źródło
17
Dziękuję za dodanie. Może być bardziej zrozumiałe, jeśli zmienisz wartość początkową w swoim przykładzie na inną niż przyrost.
Warren Stevens
7
Wartość końcowa jest włącznie.
Roland Pihlakas,
54

Rodzaj:

for /?

a otrzymasz kilka stron tekstu pomocy.

Greg Hewgill
źródło
8
Wolę to od zaakceptowanej odpowiedzi, ponieważ obsługuje różne wersje DOS / Windows. „For” zostało dość znacząco ulepszone na przestrzeni lat, a pytanie nie mówi, która wersja (wersje) jest (są) celem, ani jaki scenariusz jest podejmowany.
Mattias Andersson,
34

Warunkowo wykonaj polecenie kilka razy.

  • składnia-FOR-Files

    FOR %%parameter IN (set) DO command 
    
  • syntax-FOR-Files-Rooted w Path

    FOR /R [[drive:]path] %%parameter IN (set) DO command 
    
  • składnia-FOR-Foldery

    FOR /D %%parameter IN (folder_set) DO command 
    
  • syntax-FOR-Lista liczb

    FOR /L %%parameter IN (start,step,end) DO command 
    
  • składnia-FOR-zawartość pliku

    FOR /F ["options"] %%parameter IN (filenameset) DO command 
    

    lub

    FOR /F ["options"] %%parameter IN ("Text string to process") DO command
    
  • syntax-FOR-Command Wyniki

    FOR /F ["options"] %%parameter IN ('command to process') DO command
    

To

  • Weź zestaw danych
  • Spraw, aby parametr FOR był %%Grówny pewnej części tych danych
  • Wykonaj polecenie (opcjonalnie używając parametru jako części polecenia).
  • -> Powtórz dla każdego elementu danych

Jeśli używasz polecenia FOR w wierszu poleceń, a nie w programie wsadowym, użyj tylko jednego znaku procentu: %Gzamiast%%G .

DLA Parametry

  • Pierwszy parametr należy zdefiniować za pomocą pojedynczego znaku, na przykład litery G.

  • FOR %%G IN ...

    W każdej iteracji pętli FOR IN ( ....)klauzula jest oceniana i%%G ustawiana na inną wartość

    Jeśli ta klauzula daje pojedynczą wartość, to %% G jest ustawiana na równą tej wartości i polecenie jest wykonywane.

    Jeśli klauzula skutkuje wieloma wartościami, dodatkowe parametry są niejawnie definiowane do przechowywania każdej z nich. Są one automatycznie przypisywane w kolejności alfabetycznej%%H %%I %%J ... (niejawna definicja parametru)

    Jeśli parametr odnosi się do pliku, można użyć rozszerzonego odniesienia do zmiennej, aby wyodrębnić nazwę pliku / ścieżkę / datę / rozmiar.

    Możesz oczywiście wybrać dowolną literę alfabetu inną niż %%G. ale jest to dobry wybór, ponieważ nie koliduje z żadną z liter formatu ścieżki (a, d, f, n, p, s, t, x) i zapewnia najdłuższy ciąg niesprzecznych liter do użycia jako niejawne parametry .

J. Chomel
źródło
1
Jak używać pętli for, aby dostać się do poprzednio ustawionej zmiennej? Próbowałem / F "tokens = 2 delims =," %% i in (% a%) działa (… .. ale to nie działa. Nie udaje się powiedzieć „(było to nieoczekiwane w tym czasie”)
Shivani
Cześć. Czy %a%podaje nazwę zwykłego pliku? Trudno Ci pomóc z tym formatem. Po przeczytaniu Jak pytać możesz zadać nowe pytanie .
J. Chomel
2
@jumping_monkey, Polecenie FOR tworzy zmienne parametrów, które są identyfikowane za pomocą litery, a nie liczby (np. %% G). Można również zastosować rozszerzenia parametrów w formacie ścieżki. Aby uniknąć pomyłki między dwoma zestawami liter, unikaj używania liter (a, d, f, n, p, s, t, x, z) jako parametrów FOR lub po prostu wybierz literę parametru FOR, która jest WIELKĄ literą.
J. Chomel
Cześć @ J.Chomel, rozumiem So for example in a reference like %%~fG the %%G is the FOR parameter, and the ~f is the Parameter Expansion.(tutaj) [ ss64.com/nt/syntax-args.html ), dziękuję. Zdrowie przyjacielu.
jumping_monkey
15

FOR dostarczy Ci wszelkich informacji, które kiedykolwiek będziesz musiał wiedzieć o pętlach FOR, w tym przykłady ich prawidłowego użycia.

Mechaflash
źródło
13

Wypróbuj ten kod:

@echo off
color 02
set num1=0
set num2=1 
set terminator=5
:loop
set /a num1= %num1% + %num2%
if %num1%==%terminator% goto close
goto open
:close
echo %num1%
pause 
exit
:open
echo %num1%
goto loop

num1jest liczbą, która ma być zwiększana i num2jest wartością dodawaną, num1a terminator jest wartością, na której num1kończy się koniec. W tej instrukcji ( if %num1%==%terminator% goto close) można wskazać inną wartość dla terminatora . To jest wyrażenie boolowskie. Goto close to proces, jeśli wartość logiczna ma wartość true, a goto open to proces, jeśli wartość logiczna ma wartość false.

Marlon Ampoon
źródło
Najłatwiej to zrozumieć. Pozostałe odpowiedzi prawie nie wyjaśniają, co robią polecenia i flagi. Dla gościa obsługującego tylko javascript pliki wsadowe nie są wcale intuicyjne.
1934286
5
@echo off
echo.
set /p num1=Enter Prelim:
echo.
set /p num2=Enter Midterm:
echo.
set /p num3=Enter Semi:
echo.
set /p num4=Enter Finals:
echo.
set /a ans=%num1%+%num2%+%num3%+%num4%
set /a avg=%ans%/4
ECHO %avg%
if %avg%>=`95` goto true
:true
echo The two numbers you entered were the same.
echo.
pause
exit
Rendell tanyag
źródło
5

Z FOR /? dokumentu pomocy:

FOR% zmienna IN (zestaw) DO polecenie [parametry-polecenia]

% zmienna Określa jednoliterowy wymienny parametr.
(zestaw) Określa zestaw jednego lub więcej plików. Można używać symboli wieloznacznych. polecenie Określa polecenie do wykonania dla każdego pliku.
parametry-polecenia
Określa parametry lub przełączniki dla określonego polecenia.

Aby użyć polecenia FOR w programie wsadowym, należy określić zmienną %% zamiast
% zmienna. Nazwy zmiennych uwzględniają wielkość liter, więc% i różni się
od% I.

Jeśli rozszerzenia poleceń są włączone, obsługiwane są następujące dodatkowe
formy polecenia FOR:

FOR / D% zmienna IN (zestaw) DO polecenie [parametry-polecenia]

If set contains wildcards, then specifies to match against directory  
names instead of file names.                                          

FOR / R [[dysk:] ścieżka]% zmienna IN (zestaw) DO polecenie [parametry-polecenia]

Walks the directory tree rooted at [drive:]path, executing the FOR    
statement in each directory of the tree.  If no directory             
specification is specified after /R then the current directory is     
assumed.  If set is just a single period (.) character then it        
will just enumerate the directory tree.                               

FOR / L% zmienna IN (początek, krok, koniec) DO polecenie [parametry-polecenia]

The set is a sequence of numbers from start to end, by step amount.   
So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would   
generate the sequence (5 4 3 2 1)                                     
Kangaroo.H
źródło