For Loop-Zählung von 1 bis n in einem Windows Bat-Skript


25

Ich muss n-mal einen Windows-Befehl in einer bat-Skriptdatei ausführen. Ich weiß, wie man das in verschiedenen Programmiersprachen macht, kann es aber nicht schaffen, es in der Windows-Befehlszeile richtig zu machen :-(

Ich würde sowas auch erwarten

for(int i = 0; i < 100; i++) {
   // do something
}

oder auch das (wenn auch nicht ganz ernst)

1.upto(100, {
   // do something
}) 

Vielen Dank!

BEARBEITEN

Ich kann ein Programm in Java, Perl, C oder was auch immer schreiben, das ein Schlägerskript erzeugt, das so aussieht

for %%N in (1 2 3 4 5 6 7 8 9 10 11 12) do echo %%N

und so weiter. Oder noch "besser":

echo 1
echo 2
echo 3
echo 4
echo 5
echo 6
echo 7
echo 8
echo 9
echo 10
echo 11
echo 12

und führen Sie es dann aus ... Aber die Sache ist, dass ich eine kurze Möglichkeit brauche, um einen Bereich von Zahlen anzugeben, durch den ich innerhalb des Skripts iterieren möchte .

Vielen Dank!


1
Die Antworten hier sind perfekt, aber für die Liebe Gottes ... Charge? "Ja wirklich?" Ich würde den Umstieg auf eine modernere Sprache sehr empfehlen.
EBGreen

Es hört sich nicht so an, als hätte er die Wahl.
Wolfgangsz

Ich habe nichts gesehen, was impliziert, dass es keine Wahl gibt. Tatsächlich sagt er, er könne in "welcher Sprache auch immer" schreiben, also würde ich sagen, dass es sich anhört, als hätte er ohne weitere Informationen eine Wahl.
EBGreen

Leute, ich muss Code bereitstellen, der in einer modernen Sprache von einem Skript geschrieben ist ...
Raoulsson

1
Ob es erforderlich ist oder nicht - manchmal ist es das richtige Werkzeug für den Job. Sie können nicht garantieren, dass Powershell, geschweige denn Bash, Python, Perl usw. auf einem Windows XP- oder 2003-Server installiert sind. Batch ist eine völlig akzeptable Lösung.
Goyuix

Antworten:


44

Sie können es ähnlich wie folgt machen:

ECHO Start of Loop

FOR /L %i IN (1,1,5) DO (
  ECHO %i
)

Die 1,1,5 wird dekodiert als:

(start,step,end)

Beachten Sie auch, dass Sie beim Einbetten in eine Stapeldatei das doppelte Prozentzeichen (%%) als Präfix für Ihre Variablen verwenden müssen. Andernfalls versucht der Befehlsinterpreter, die Variable% i auszuwerten, bevor Sie die Schleife ausführen.


3
"ECHO Start of Loop" wird bei jedem Schritt ausgeführt, nicht nur beim Start.
Bis auf weiteres angehalten.

1
Die Verwendung eines @Zeichens unterdrückt auch das Drucken der Befehle, wenn diese über die Befehlszeile ausgeführt werden. "... DO @ (..."
Bis auf weiteres angehalten.

Dies funktioniert nur mit dem / L nach dem "FOR". Warum ist das?
Raoulsson

1
Mach ein Für /? und Sie finden: FOR / L% -Variable IN (Start, Schritt, Ende) DO-Befehl [Befehlsparameter] Die Menge ist eine Folge von Zahlen von Anfang bis Ende nach Schrittbetrag. Also würde (1,1,5) die Sequenz 1 2 3 4 5 erzeugen und (5, -1,1) würde die Sequenz (5 4 3 2 1)
erzeugen

Es ist besser, %%iin Ihrem Text einen Kommentar hinzuzufügen, der %ifür die direkte Ausführung in der Befehlszeile vorgesehen ist. Die meisten Benutzer werden es in einer BAT-Datei testen und versuchen, den Grund zu finden, warum sie eine Fehlermeldung erhalten (wie ich).
i486

8

Syntax ist

FOR %%A IN (1 2 3) DO ECHO %%A

Guter Artikel hier und XP-Besonderheiten hier


6

Direkt von der Kommandozeile:

for /L %n in (1,1,100) do @echo %n

Verwenden einer Batchdatei:

@echo off
for /L %%n in (1,1,100) do echo %%n

Zeigt an:

1
2
3
...
100

Was ist, wenn die Zahlenfolge 0001 bis 00100+ usw. ist?
nwgat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.