codestory

Schleifen in der Batch-Skriptsprache

  1. Die Überblick über die Schleife in der Sprache Batch
  2. Die Schleife for ( Standard)
  3. For /R
  4. For /D
  5. For /L
  6. For /F

1. Die Überblick über die Schleife in der Sprache Batch

Standard Delimiter.
  • Das Leerzeichen (space)
  • Das Komma ( , )
  • Das Semikolon ( ; )
  • Der Tabulator (TAB)

2. Die Schleife for ( Standard)

Die Schleife for (Standardt) von der Sprache Batch wird benutzt um eine Liste der File zu iterieren
Die Syntax
@rem set_of_files -  Set of Files
@rem Files separated by standard delimiters.
@rem The parameter name 'variable' must be 1 character
FOR %%variable IN ( set_of_files ) DO command

@rem Hoặc:
FOR %%parameter IN ( set_of_files ) DO  (
     command
)
Zum Beispiel: Einige File in einem Verzeichnis kopieren (Achtung: Die kopierende File und der Zielsverzeichnis sollen in einer Diskplatte liegen).
copyFiles.bat
@echo off
@rem Copy to same Disk

FOR %%f IN (E:\test\file1.data  E:\test\file2.txt) DO  (
   echo Copying %%f
   copy  %%f E:\backup
)
pause
Das andere Beispiel:
@rem The delimiter is a semicolon (;)
FOR %%f IN ("E:\my dir\file1.data" ; E:\test\file2.txt) DO copy %%f E:\backup

@rem The delimiter is a comma ( , )
FOR %%f IN ("E:\my dir\file1.data" , E:\test\file2.txt) DO copy %%f E:\backup

@rem The delimiter is a space.
FOR %%f IN ("E:\my dir\file1.data" E:\test\file2.txt) DO copy %%f E:\backup

3. For /R

Die Schleife FOR /R wird verwendet um die Liste der Datei zu iterieren, einschließend die Sub-Verzeichnisse ... Es wird auch die Recurse-Schleife.
Die Syntax
FOR /R [path] %%variable IN ( set_of_file_filters ) DO command

@rem Or:
FOR /R [path] %%variable IN ( set_of_file_filters ) DO (
   command
)
  • [path] : Der Parameter ist der Hauptverzeichnis. Wenn es keinen Parameter gibt, wird "der Verzeichnis zur Enthaltung von der implementierenden Skript File" oder "der aktuelle Verzeichnis" als den Hauptverzeichnis gesehen.
  • set_of_file_filters : Die Liste der Filter File. Zum Beispiel: *.txt , *.bat, ... oder die Punkt ( . ) bedeutet alles
  • variable: ist der Name der Variable und muss ein einziges Zeichen haben
Das folgende Beispiel druckt die Liste der File *.txt oder *.log im Verzeichnis C:/Windows/System32 (in den Unterverzeichnis finden..)
forR_example1.bat
@echo off
FOR /R "C:\Windows\System32" %%f IN (*.txt *.log) DO  (
   echo %%f
)
pause
Das Beispiel listet die allen Datei im Verzeichnis C:/Windows/System32 auf (die Datei in den Unterverzeichnis einschließen ...)
forR_example2.bat
@echo off 
FOR /R "C:\Windows\System32" %%f IN ( . ) DO  ( 
   echo %%f
)
pause

4. For /D

Die Schleife FOR /D wird verwendet um die Liste der Verzeichnis als den Unterverzeichnis des aktuellen Verzeichnis durchzulaufen.
Die Syntax
FOR /D [/r] %%variable IN ( set_of_directory_filters ) DO command

@rem Or:
FOR /D [/r] %%parameter IN ( set_of_directory_filters ) DO  (
    command
)
  • set_of_directory_filters : Die Liste der Verzeichnis Filter (directory filter) wie en*, fr*,.. , die durch das Standard Delimiter getrennt werden.
  • [/r]: Das ist der Parameter Rekursion (Recurse) und nicht zwanghaft. Wenn es den Parameter gibt, werden die Unterverzeichnis ... an die Schleife teilgenommen.
  • variable: ist der Name der Variable und muss ein einziges Zeichen haben
Zum Beispiel: Die Liste der Unterverzeichnis vom Verzeichnis C:/Windows auflisten
forD_example1.bat
@echo off
C:
cd C:/Windows

FOR /D %%d IN ( * ) DO  (
   echo %%d
)
pause
Zum Beispiel: Die Unterverzeichnis vom Verzeichnis C:/Windows auflisten, dessen Name mit "en" oder "fr" beginnt
forD_example2.bat
@echo off
C:
cd C:/Windows

FOR /D /r %%d IN (en* fr*) DO  (
   echo %%d
)
pause

5. For /L

Die Schleife For /L wird verwendet um die Reihe der Zahlen durchzulaufen (range of numbers).
Die Syntax
FOR /L %%variable IN (start, step, end) DO command

@rem Or:
FOR /L %%variable IN (start, step, end) DO  (
     command
)
  • start: Die erste Wert der Variable
  • step: Nach jeder Iteration wird die Wert der Variable die 'step' eingefügt.
  • end: Die letzte Wert
Zum Beispiel
forL_example1.bat
@echo off 
FOR /L %%d IN (1 2 8 ) DO  (
   echo %%d
)
pause
forL_example2.bat
@echo off 
FOR /L %%d IN (20 -2 5 ) DO  (
   echo %%d
)
pause

6. For /F

Die Schleife For /F ist eine komplizierte aber starke Schleife. Sie liest eine File oder einige File dann analysiert die Inhalt der File. Die Inhalt einer File ist eine Text. Sie werden in vielen kleinen Text getrennt. Jede kleine Text wird ein Token genannt. Die Standardregelung zur Trennung der Text basiert auf die Leerzeichen (white space). Allerdings können Sie durch den Parameter ["delims=xxx"] die Trennungsregelung anpassen.
Die Schleife For /F wird auch verwendet um die Inhalt eines String zu analysieren oder eine Befehlskombination zu implementieren
Die Syntax
FOR /F ["options"] %%variable IN ( set_of_filenames ) DO command

FOR /F ["options"] %%variable IN ( set_of_filenames ) DO (
     command
)
FOR /F ["options"] %%variable IN ("Text string to process") DO command
FOR /F ["options"] %%variable IN ("Text string to process") DO ( 
     command
)
  • set_of_filenames: Die Liste von einer oder mehrer File.
  • options: Die Auswähle, zum Beispiel: "delims=, tokens=1,2,4"
Die Auswahl
Die Bezeichnung
delims=xxx
delimiter character(s). Nach dem Standard ist es ein Leerzeichen (space)
skip=n
Die erste Linieanzahl wird in der Inhalt der File übergesprungen. Nach dem Standard ist es skip=0
eol=;
eol (End of Line): Ein besonderes Zeichen bestimmen. Es wird am Anfang einer Linie gelegt um diese Linie als die Kommentarslinie zu markieren. Die Kommentarlinie wird übergesprungen. Nach dem Standard ist es das Semikolon ( ; )
tokens=n1,n2,n3
Die versorgten Positionen (n1, n2, n3, ..), Nach dem Standard ist tokens=1
usebackq
(die Erklärungen in den Beispiele mehr lesen)
Um einfach zu verstehen, bitte analysieren wir die folgenden File:
eol (End of Line)
eol: wird verwendet um ein besonderes Zeichen zu bestimmen. Nach dem Standard ist es das Semikolon ( ; ). Es wird am Anfang einer Linie gelegt um diese Linie als Kommentar zu markieren. Das Programm wird diese Linie überspringen
skip=n
skip: Die Anzahl der ersten Linie der File werden übergesehen. Das Programm wird diese Linie nicht analysieren. Nach dem Standard ist skip=0
delims (Delimiter character(s))
delims: Die Definition des delimiter Character hilft dem Programm bei der Trennung der Textlinie in die Sub-Text. Jede Sub-Text wird ein Token genannt. Die Token werden die Index 1, 2, 3, ...gemarkiert
tokens=n1,n2,n3
tokens: Die Liste der gesorgten Index deklarieren und die Index werden durch Komma getrennt. Zum Beispiel: tokens=1,2,4. Das Standard: tokens=1
Tokens
Die Bezeichnung
tokens=1,2,4
Die Index von 1, 2, 4 werden gesorgt
tokens=2-8
Die Index von 2 bis 8 werden gesorgt
tokens=3,*
Die Index von 3, 4,5, ... werden gesorgt
tokens=*
Alle Index werden gesorgt
Zum Beispiel "tokens=1,2,4", bedeutet , dass die Token in der Stelle von 1, 2, 4 die Sorge bekommen. Und die anderen Token werden ignoriert (Ignore).
Zum Beispiel: Die Datei analysieren
Zum Beispiel: Die Verwendung von der Schleife FOR /F um die File persons.txt zu lesen:
persons.txt
List of celebrities
Creation date: 2017/09/11

; (Comment) Male List
Bill,Gates,1955/10/28,Male
Steve,Jobs,1955/02/24,Male
Mark,Zuckerberg,1984/05/16,Male
Sundar,Pichai,1972/07/12,Male
; (Comment) Female List
Hillary,Clinton,1947/10/26,Female
forF_example1.bat
@echo off 
FOR /F "delims=, skip=3 eol=; tokens=1,2,4" %%i IN ( persons.txt ) DO  (
   echo Full Name: %%i %%j   Gender: %%k
)
pause
Achtung: Der Name der Variable auf die Schleife hat nur ein einziges Zeichen
Die Variable %%i wird auf die Schleife explizit deklariert. Die Variable %%j, %%k sind die implizit deklarierten Variables (Der Name von den impliziten Variables sind die nächsten Zeichen der expliziten Variables).
Zum Beispiel: Die Analyse des String
  • TODO