Wie schleifen Sie eine Windows-Batchdatei ein?

170

Wie lautet die Syntax für eine FOR-Schleife in einer Windows-Batchdatei?

Pradeep
quelle

Antworten:

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

list ist eine Liste aller Elemente, die durch Leerzeichen, Kommas oder Semikolons getrennt sind.

Befehl kann ein beliebiger interner oder externer Befehl, eine Batchdatei oder sogar - in OS / 2 und NT - eine Liste von Befehlen sein

Parameter enthält die Befehlszeilenparameter für den Befehl. In diesem Beispiel wird der Befehl einmal für jedes Element in der Liste ausgeführt, wobei Parameter verwendet werden, sofern angegeben.

Ein spezieller Parametertyp (oder sogar ein Befehl) ist %% A, der nacheinander durch jedes Element aus der Liste ersetzt wird.

Von FOR-Schleifen

rahul
quelle
3
Kann ich den Bereich (1 bis 100) in der Liste angeben?
Pradeep
36
FOR /L %x IN (1,1,100) DO ...
Joey
Legen [ parameters ]Sie Parens herum, wenn Sie mehrere Zeilen in Ihre forSchleife aufnehmen möchten
Frank Bryce
1
@aaiezza, ich stimme Ihrer Meinung zu. Ich kämpfe gerade mit diesen blutigen Schleifen und arbeite völlig unerwartet. Ich habe keine Ahnung, was die Steuerung des Ausgangs steuert. Schreckliches Zeug. Nützlich, aber schrecklich.
RockDoctor
223

Wenn Sie x-mal etwas tun möchten, können Sie dies tun:

Beispiel (x = 200):

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

1,1,200 meint:

  • Start = 1
  • Inkrement pro Schritt = 1
  • Ende = 200
vancoeverden
quelle
17
Danke fürs Hinzufügen. Könnte klarer sein, wenn Sie den Startwert in Ihrem Beispiel in einen anderen Wert als das Inkrement ändern.
Warren Stevens
7
Der Endwert ist inklusive.
Roland Pihlakas
54

Art:

for /?

und Sie erhalten mehrere Seiten Hilfetext.

Greg Hewgill
quelle
8
Ich bevorzuge dies gegenüber der akzeptierten Antwort, da es die verschiedenen Versionen von DOS / Windows behandelt. "For" wurde im Laufe der Jahre erheblich verbessert, und die Frage sagt weder aus, auf welche Version (en) abgezielt wird (werden), noch welches Szenario versucht wird.
Mattias Andersson
34

Führen Sie einen Befehl bedingt mehrmals aus.

  • Syntax-FOR-Files

    FOR %%parameter IN (set) DO command 
    
  • Syntax-FOR-Files-Rooted at Path

    FOR /R [[drive:]path] %%parameter IN (set) DO command 
    
  • Syntax-FOR-Ordner

    FOR /D %%parameter IN (folder_set) DO command 
    
  • Syntax-FOR-Liste der Zahlen

    FOR /L %%parameter IN (start,step,end) DO command 
    
  • Inhalt der Syntax-FOR-Datei

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

    oder

    FOR /F ["options"] %%parameter IN ("Text string to process") DO command
    
  • Syntax-FOR-Befehl Ergebnisse

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

Es

  • Nehmen Sie einen Datensatz
  • Machen Sie einen FOR-Parameter %%Ggleich einem Teil dieser Daten
  • Führen Sie einen Befehl aus (optional mit dem Parameter als Teil des Befehls).
  • -> Wiederholen Sie dies für jedes Datenelement

Wenn Sie den FOR-Befehl nicht in einem Stapelverarbeitungsprogramm, sondern in der Befehlszeile verwenden, verwenden Sie nur ein Prozentzeichen: %Ganstelle von %%G.

FOR-Parameter

  • Der erste Parameter muss mit einem einzelnen Zeichen definiert werden, z. B. dem Buchstaben G.

  • FOR %%G IN ...

    In jeder Iteration einer FOR-Schleife wird die IN ( ....)Klausel ausgewertet und %%Gauf einen anderen Wert gesetzt

    Wenn diese Klausel zu einem einzelnen Wert führt, wird %% G gleich diesem Wert gesetzt und der Befehl ausgeführt.

    Wenn die Klausel zu mehreren Werten führt, werden implizit zusätzliche Parameter definiert, die jeweils enthalten sind. Diese werden automatisch in alphabetischer Reihenfolge vergeben %%H %%I %%J... (implizite Parameterdefinition)

    Wenn sich der Parameter auf eine Datei bezieht, kann die erweiterte Variablenreferenz verwendet werden, um den Dateinamen / Pfad / Datum / Größe zu extrahieren.

    Sie können natürlich einen anderen Buchstaben des Alphabets als auswählen %%G. Dies ist jedoch eine gute Wahl, da es nicht mit Buchstaben im Pfadnamenformat (a, d, f, n, p, s, t, x) in Konflikt steht und die längste Anzahl nicht widersprüchlicher Buchstaben zur Verwendung als implizite Parameter bereitstellt .

J. Chomel
quelle
1
Wie verwende ich die for-Schleife, um in eine zuvor festgelegte Variable zu gelangen? Ich habe versucht für / F "tokens = 2 delims =," %% i in (% a%) do (... aber das funktioniert nicht. Es kann nicht gesagt werden "(war zu diesem Zeitpunkt unerwartet"
Shivani
Hallo. Gibt %a%der Name einer regulären Datei an? Es ist schwierig, Ihnen bei diesem Format zu helfen. Fühlen Sie sich frei, eine neue Frage zu stellen, nachdem Sie How to Ask gelesen haben .
J. Chomel
2
@jumping_monkey, Der Befehl FOR erstellt Parametervariablen, die eher mit einem Buchstaben als mit einer Zahl gekennzeichnet sind (z. B. %% G). Auf diese kann auch das Pfadformat Parametererweiterungen angewendet werden. Um Verwechslungen zwischen den beiden Buchstabensätzen zu vermeiden, sollten Sie die Buchstaben (a, d, f, n, p, s, t, x, z) nicht als FOR-Parameter verwenden oder einfach einen FOR-Parameterbuchstaben im Großbuchstaben auswählen.
J. Chomel
Hallo @ J.Chomel, So for example in a reference like %%~fG the %%G is the FOR parameter, and the ~f is the Parameter Expansion.habe es (hier) [ ss64.com/nt/syntax-args.html] , danke. Prost Kumpel.
jump_monkey
15

FOR Hier finden Sie alle Informationen, die Sie jemals über FOR-Schleifen wissen müssen, einschließlich Beispiele zur ordnungsgemäßen Verwendung.

Mechaflash
quelle
13

Versuchen Sie diesen Code:

@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

num1ist die Zahl, die erhöht werden soll, und num2ist der Mehrwert, num1und terminator ist der Wert, an dem der num1Wille endet. In dieser Anweisung ( if %num1%==%terminator% goto close) können Sie einen anderen Wert für den Terminator angeben . Dies ist der boolesche Ausdruck. Goto close ist der Prozess, wenn der Boolesche Wert wahr ist, und goto open ist der Prozess, wenn der Boolesche Wert falsch ist.

Marlon Ampoon
quelle
Dies ist am einfachsten zu verstehen. Die anderen Antworten geben fast keine Erklärung dafür, was die Befehle und Flags tun. Für einen Typ, der nur Javascript verwendet, sind Batch-Dateien überhaupt nicht intuitiv.
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
quelle
5

Aus dem FOR /?Hilfedokument:

FOR% Variable IN (gesetzt) ​​DO-Befehl [Befehlsparameter]

% variable Gibt einen durch einen einzelnen Buchstaben ersetzbaren Parameter an.
(set) Gibt einen Satz von einer oder mehreren Dateien an. Platzhalter können verwendet werden. Befehl Gibt den Befehl an, der für jede Datei ausgeführt werden soll.
Befehlsparameter
Gibt Parameter oder Schalter für den angegebenen Befehl an.

Um den FOR-Befehl in einem Stapelverarbeitungsprogramm zu verwenden, geben Sie %% variable anstelle
von% variable an. Variablennamen unterscheiden zwischen Groß- und Kleinschreibung, daher unterscheidet sich% i
von% I.

Wenn
Befehlserweiterungen aktiviert sind, werden die folgenden zusätzlichen Formen des FOR-Befehls unterstützt:

FOR / D% Variable IN (gesetzt) ​​DO-Befehl [Befehlsparameter]

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

FOR / R [[Laufwerk:] Pfad]% Variable IN (gesetzt) ​​DO-Befehl [Befehlsparameter]

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% Variable IN (Start, Schritt, Ende) DO-Befehl [Befehlsparameter]

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
quelle