Schleifen in der Batch-Skriptsprache

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 /R 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