Batch: Was verbirgt FOR für Anwendungsmöglichkeiten?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Da du jetzt eher allgemeine Antworten zur For-Schleife bekommen hast, hier noch mal für Batch, da dort vieles anders ist, als in "normalen" Programmiersprachen.

Wenn du wissen willst, was ein Befehl macht, einfach immer Befehl/? in cmd eingeben, dort bekommst du meistens alle Infos die du wissen musst.

Wenn du das ganze mal mit for/? machst, wirst du sehen, dass es für for-Schleifen in Batch sehr viele verschiedene Varianten und Anwendungsmöglichkeiten gibt. Ich werde dir mal das wichtigste dazu hier aufführen.

Die Grundstruktur von for ist:

FOR /x %y IN (satz) DO befehl

In fast allen anderen Programmiersprachen sieht eine for-Schleife ungefähr so aus:

for(int i=0; i<10; i++){
  //code
}

Sie wird meist dafür genutzt einen Befehl beliebig oft hintereinander auszuführen (im obigen Beispiel 10mal). Die Variable i hat dabei bei jedem mal einen anderen Wert. (im Bsp. immer 1 mehr, wegen ++).

Diese Funktion ist in Batch auch vorhanden, macht aber nur einen kleinen Teil der Möglichkeiten von for aus. Hier mal das Beispiel, das von 0 bis 9 zählt:

FOR /L %%i in (0,1,9) do (
  echo %%i. Durchlauf
  pause >nul
)
  • /L ist die Option für dieses zählen
  • %%i ist die Variable, sie kann beliebig nach einem Buchstaben benannt werden (hier spielt Groß/Kleinschreibung ausnahmsweise eine Rolle, also %%i ist nicht gleich %%I)
  • (0,1,9) der Satz in der Form: (Startwert,Schritt,Ende); Damit kann auch rückwärts gezählt werden, zB. mit: (4,-1,0)

Eine einfache und praktische Funktion ist auch die Standardvariante:

FOR %%X IN (Satz) DO befehl

Kurze Anmerkung: Die Klammer um den Befehl / die Befehle nach DO muss man nicht hinmachen, vor allem bei einem Befehl kann man somit schön alles in eine Zeile schreiben.

Hier ein Beispiel für die "Standardvariante":

FOR %%F in (*.txt) do echo %%F
  • %%F ist wieder die Variable
  • (*.txt): Der Satz besteht hier aus einer oder mehreren Dateien. Das * ist ein Platzhalter für alle möglichen Zeichen, also alle Dateien die auf .txt enden. Von diesen Dateien (allen Textdateien in dem Ordner in dem die Batch liegt) gibt das Programm dir jetzt nacheinander die Namen aus. (echo %%F)

Eine andere sehr häufig verwendbare Variante ist FOR /F:

FOR /F "Optionen" %%X IN (...) DO befehl

Damit kann man auch wieder viele verschiedene Dinge machen, zB:

  • Textdateien zeilenweise auslesen:
FOR /F "delims=" %%L in (datei.txt) do echo.%%L
  • Eine Zeichenfolge zerlegen
for /F "tokens=1,2,3,4 delims= " %%A in ("Dies ist ein Satz") do echo Wort 1: %%A; Wort 2: %%B; Wort 3: %%C; ...

delims = Trennzeichen (hier Leerzeichen)

tokens = welche Teile werden genommen (um nur das zweite Wort zu bekommen tokens=2, wäre dann in %%A )

  • Die Ausgabe eines Programmes/Befehls verarbeiten/speichern
for /f "delims=" %%A in ('dir /s') do echo %%A >> dir.txt

(wenn man die Ausgabe eines Befehles in eine Datei schreiben will geht das natürlich deutlich einfacher, aber wenn du die Ausgabe zum Beispiel durchsuchen lassen willst, geht das mit findstr als Befehl nach dem do)

Hoffe ich konnte dir helfen und hab nicht zu viel zu durcheinander geschrieben ^^ Frag einfach noch mal nach, falls was unklar ist oder du mehr Anwendungsbeispiele sehen willst.

~Tim

timlg07  27.01.2018, 23:57

PS: Das beste um so etwas zu verstehen ist einfach ausprobieren.

0
schwappo 
Fragesteller
 28.01.2018, 00:01

Danke dass Du Dir so viel Mühe und wahrscheinlich auch Zeit gegeben bzw genommen hast mir das zu erläutern!

1

Hey,

es gibt Kopf- und Fußschleifen.

Kopfschleifen sind Schleifen wo vor dem betreten des Codes eine Schleifenbedingung abgefragt werden. Am Ende wird wieder an den Anfang der Schleife gesprungen wo die Bedingung erneut abgefragt wird. FOR wäre jetzt so eine Kopfschleife. Du kannst dies entfernt mit IF vergleichen.

Zum Verständnis hier noch die Fußschleife. Dort wird ohne Abfrage der Code einmalig ausgeführt. Am Ende des Codes wird dann ähnlich wie bei der Kopfschleife eine Schleifenbedingung abgefragt. Je nach dem wie der Rückgabewert der Abfrage ist, wird entschieden ob diese Schleife nochmal durchlaufen wird.

Grüße

Remine

FOR ist der Befehl für eine Schleife. In dieser kann man Befehle immer wider widerholen lassen bis eine bestimmte Bedingung erfüllt ist, erst danach geht es mit den Befehlen die nach der For-Schleife stehen weiter.

schwappo 
Fragesteller
 25.01.2018, 23:39

Hm... Das klingt mal endlich verständlich

0