o7planning

Loops in Batch Scripting Language

  1. Overview of loops in Batch language
  2. For Loop (Default)
  3. For /R
  4. For /D
  5. For /L
  6. For /F

1. Overview of loops in Batch language

Standard Delimiters
  • Space
  • Comma ( , )
  • Semi-colon ( ; )
  • TAB

2. For Loop (Default)

For loop (default) of Batch language is used to iterate over a list of files.
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
)
Example: copy some files into a directory (Note: the files to be copied into the target directory need to be in the same disk drive).
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
Other example:
@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

The FOR /R loop is used to iterate over the list of files, including files in subdirectories, grandchildren .. It is called Recurse loop.
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] : This parameter is a root folder. If there is not this parameter "the folder containing executable script file" hoặc "current folder" will be considered as root folder .
  • set_of_file_filters : List of file filters, for example *.txt , *.bat, ... or dot ( . ) means all.
  • variable: means name of variable and must have one unique characte.
The following example prints the list of all *.txt or *.log files in the C:/Windows/System32 directory (Includes search in subdirectories, grandchildren ..)
forR_example1.bat
@echo off
FOR /R "C:\Windows\System32" %%f IN (*.txt *.log) DO  (
   echo %%f
)
pause
Example of listing all files in the C:/Windows/System32 directory (including files in subdirectories, grandchildren ...)
forR_example2.bat
@echo off 
FOR /R "C:\Windows\System32" %%f IN ( . ) DO  ( 
   echo %%f
)
pause

4. For /D

The FOR /D loop is used to iterate over the list of directories which are subdirectories of current directory.
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 : List of directory filters for example, en*, fr*,.. separated by a standard delimiter.
  • [/r]: This is a recurse parameter and not mandatory. If this parameter is available, subdirectories, grandchildren .. will be envolved in the loop.
  • variable: means name of variable and must have a unique character.
Example: List subdirectories of C:/Windows.
forD_example1.bat
@echo off
C:
cd C:/Windows

FOR /D %%d IN ( * ) DO  (
   echo %%d
)
pause
Example: List subdirectories, grandchildren ... of the C:/Windows with the name started by "en" or "fr"
forD_example2.bat
@echo off
C:
cd C:/Windows

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

5. For /L

For /L loop is used to iterate over a range of numbers.
Syntax:
FOR /L %%variable IN (start, step, end) DO command

@rem Or:
FOR /L %%variable IN (start, step, end) DO  (
     command
)
  • start: The first value of variable
  • step: After each iteration, variable value will be added 'step'.
  • end: Last value.
Example:
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

The For /F loop is a complex but powerful loop. It reads a file or a few files and then analyzes the contents of files. The content of a file is a text; it is split into several small pieces of text, each of which is called a Token. The default rule for separating a text is based on white space. However, you can customize the delimiter rule by ["delims = xxx"] parameter.
The For / F loop is also used to analyze the contents of a string, or to execute a set of commands.
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: List of a or several files.
  • options: Options, for example, "delims=, tokens=1,2,4"
Option
Description
delims=xxx
Delimiter character(s). by default is a space
skip=n
The first line number will be ignored in the contents of file, defaulted skip = 0
eol=;
eol (End of Line): Specifies a special character, which is put at the beginning of a line to mark this line as comment line. Comment lines will be ignored by the program, defaulted semicolon character (;)
tokens=n1,n2,n3
defines the positions cared about (n1, n2, n3, ..), defaulted tokens=1
usebackq
(See explanation in examples)
To be easy to understand, let's analyze the following file:
eol (End of Line)
eol: Used to specify a special character, which is by default a semicolon character (;). It is placed at the beginning of a line to mark that such line is a comment. The program will ignore this line.
skip=n
skip: Declare the number of first lines of the file will be ignored, the program will not analyze these lines. Default skip = 0
delims (Delimiter character(s))
delims: Defines delimiter characters, helping the program to delimit each line of text into sub-paragraphs, each of which is called a Token. Tokens are marked indices: 1, 2, 3, ...
tokens=n1,n2,n3
tokens: Declare a list of indices that are interested in, separated by commas. For example, tokens = 1,2,4, defaulted: tokens = 1
Tokens
Description
tokens=1,2,4
The indices such as 1, 2, 4 are interested.
tokens=2-8
The indices of 2 to 8 are interested
tokens=3,*
The indices such as 3, 4,5, ... are interested
tokens=*
All indices are interested
For example, "tokens=1,2,4", means that Tokens at the position of 1, 2, 4 are interested and other Tokens will be ignored.
Example of file analysis:
Example of using the FOR /F loop to read persons.txt file:
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
Note: Name of variables on the loop has only character .
Biến %%i variable is explicitly declared on the loop. %% j, %% k variables are implicitly declared (names of implicit variables are the next characters of explicit variable names).
Example of String analysis:
  • TODO