MS-DOS Forum

MS-DOS Forum
Anleitungen, Referenz aller DOS Befehle, Batch Dateien
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    MS-DOS Forum Foren-Übersicht -> Batch Programmierung
Autor
Nachricht
matthias





FOR Schleifen in Stapelverarbeitsprogrammen
Verfasst am: 24.05.2009, 21:15

Die FOR-Konstruktion ermoeglicht die mehrfache Ausfuehrung eines
Befehls mit einem variablen Argument. Die Argumente werden nacheinander
aus einer Liste entnommen. Beispiel:
FOR %%a IN (X Y Z) DO echo %%a

Liste Befehl
Das hat die gleiche Wirkung wie:
echo X
echo Y
echo Z
Die Schluesselwoerter "IN" und "DO" sind vorgeschrieben.
Die Argument-Liste muss immer in Klammern gesetzt werden.
Und jetzt zu diesem "%%a":
Erstens: Es kann jeder beliebige Buchstabe verwendet werden, nur
keine Ziffer (fuer Befehlsparameter reserviert). Dass ueberhaupt
verschiedene Buchstaben moeglich sind, macht eigentlich keinen
Sinn, denn diese Variable ist nur innerhalb der FOR-Zeile gueltig,
und ein mehrfaches FOR (Schachtelung) ist nicht zulaessig.
Zweitens: Das doppelte %-Zeichen ist in BAT-Dateien Vorschrift.
Auf der Befehlsebene (wo die FOR-Konstruktion auch moeglich ist)
darf jedoch nur EIN %-Zeichen verwendet werden.
Anmerkung: DOS ersetzt in einer BAT-Zeile grundsaetzlich doppelte
%-Zeichen durch ein einfaches, und versucht in diesem Falle nicht,
Umgebungsvariable oder Befehlsparameter einzusetzen. Danach sieht
also eine FOR-Zeile genauso aus wie auf der Befehlsebene.
Als Befehl in einer FOR-Konstruktion sind beliebige BAT-Befehle
(auch CALL), DOS-Befehle oder Programmaufrufe moeglich. Nur ein
weiteres FOR ist nicht moeglich.
Noch ein Beispiel:
FOR %%x in (DER.TXT DIE.DAT DAS.BLA) do COPY %%x A:

Argumente mit Joker-Zeichen

Sobald DOS in der Argument-Liste Fragezeichen oder Sternchen
findet, wird das Argument als Dateiname verstanden (ggfs. mit
Laufwerk und Pfad). Der Befehl wird dann fuer jeden Dateinamen
ausgefuehrt, auf den der "Match-Code" passt. Beispiele:
FOR %%a in (C:\*.BAT) do type %%a
FOR %%a in (*.TXT *.DAT) do echo %%a
Im zweiten Beispiel werden alle Dateinamen mit den Zusaetzen .TXT
und .DAT auf dem Bildschirm ausgegeben.
FOR %%f in (A:*.*) do DEL %%f
Hier wird nicht etwa der Befehl "DEL A:*.*" ausgefuehrt, sondern
ein DEL-Befehl fuer jede einzelne Datei!

Trennzeichen in der Liste

Ausser Leerzeichen koennen Komma, Semikolon oder sogar das Gleich-
Zeichen verwendet werden. Ein Argument darf also diese Zeichen
nicht enthalten. Etwas ganz Merkwuerdiges geschieht beim Schraegstrich.
Ausprobieren: FOR %%a in (TEST/L12) do ECHO %%a

Befehl mit IF

Der auszufuehrende Befehl darf auch bedingt sein. Beispiel:
FOR %%a in (100,70,10,5,3,1) do IF ERRORLEVEL %%a GOTO L-%%a
bewirkt:
IF ERROELEVEL 100 goto L-100
IF ERROELEVEL 70 goto L-70
(u.s.w....)
Dazu muss gesagt werden, dass eine FOR-Schleife (zwangslaeufig)
mit dem ersten ausgefuehrten GOTO beendet wird.
Generell lassen sich alternative Bedingungen (ODER) mit einer
FOR-Schleife einfacher darstellen als durch mehrfache IF-Zeilen,
z.B.:
FOR %%x in (A: a: B: bSmile do IF !%1==!%%x goto OK
QUIT echo Ungueltiges Laufwerk!
:OK
Hier wird getestet, ob der Befehlsparameter %1 ein gueltiges
Diskettenlaufwerk enthaelt. (Das "!" verhindert Syntaxfehler,
falls %1 leer ist. QUIT s. Lektion #11.)
Ein bedingtes FOR kann ebenfalls verwendet werden, z.B.:
if not !%1==! FOR %%a in (A: a: B: bSmile do IF %1==%%a goto OK

Leere Argumente

Sind einzelne Argumente leer, wird der Befehl dafuer nicht ausgefuehrt,
z.B. hier:
FOR %%a in (%1,%2,%3,%4,%5) do ECHO %%a
Ist die ganze Argument-Liste leer, wird gar nichts ausgefuehrt.
Es gibt auch keine Fehlermeldung, wenn hier z.B. %1 leer ist:
FOR %%a in (%1) do irgendwas

Vorsicht!

Fuer die Variable koennen Gross- oder Kleinbuchstaben verwendet
werden, aber innerhalb einer FOR-Zeile muss man bei der Schreibweise
bleiben! Das hier funktioniert nicht:
FOR %%a in (*.*) do ECHO %%A
^ ^

FOR mit CALL

Was eigentlich nicht geht, naemlich FOR-Verschachtelungen und
Ausfuehrung MEHRERER Befehle, laesst sich evtl. durch CALL einer
weiteren BAT-Datei im FOR-Befehl realisieren.
_________________
 
Neues Thema eröffnen   Neue Antwort erstellen    MS-DOS Forum Foren-Übersicht -> Batch Programmierung

Tags: dos, for, befehle, befehl, beispiele

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Suchen von Text mit dem Befehl find 990 22.08.2009, 06:18
Keine neuen Beiträge Steuern der Bildschirmanzeige mit dem Befehl more 666 15.08.2009, 09:37
Keine neuen Beiträge Umleiten der Eingabe für einen Befehl 698 02.08.2009, 18:14
Keine neuen Beiträge Der Befehl Restore funktioniert nicht 1216 08.12.2008, 08:39
Keine neuen Beiträge Der Befehl Undelete funktioniert nicht 1929 01.12.2008, 09:32
 

Besuchen Sie unsere Auftragsdatenbank für Bauprojekte. -


[ Time: 0.2772s ][ Queries: 59 (0.0726s) ][ GZIP on - Debug on ]