For - Looping commands Page 1 of 2
FOR
Conditionally perform a command several times.
syntax-FOR-Files
FOR %%parameter IN (set) DO command
syntax-FOR-Files-Rooted at Path
FOR /R [[drive:]path] %%parameter IN (set) DO command
syntax-FOR-Folders
FOR /D %%parameter IN (folder_set) DO command
syntax-FOR-List of numbers
FOR /L %%parameter IN (start,step,end) DO command
syntax-FOR-File contents
FOR /F ["options"] %%parameter IN (filenameset) DO command
FOR /F ["options"] %%parameter IN ("Text string to process") DO command
syntax-FOR-Command Results
FOR /F ["options"] %%parameter IN ('command to process') DO command
The operation of the FOR command can be summarised as...
Take a set of data
Make a FOR Parameter %%G equal to some part of that data
Perform a command (optionally using the parameter as part of the command).
Repeat for each item of data
If you are using the FOR command at the command line rather than in a batch program, specify %parameter instead of %%
parameter.
FOR Parameters
The first parameter has to be defined using a single character, I tend to use the letter G.
e.g. FOR %%G IN ...
In each iteration of a FOR loop, the IN ( ....) clause is evaluated and %%G set to a different value
If this results in a single value then %%G is set = to that value and the command is performed.
If this results in a multiple values then extra parameters are implicitly defined to hold each. These are automatically assigned in
alphabetical order %%H %%I %%J ...(implicit parameter definition)
For example
FOR /F %%G IN ("This is a long sentence") DO @echo %%G %%H %%J
will result in the output
This is long
You can of course pick any letter of the alphabet other than %%G.
%%G is a good choice because it does not conflict with any of the pathname format letters (a, d, f, n, p, s, t, x) and provides the
longest run of non-conflicting letters for use as implicit parameters.
G>H>I>J>K>L>M
Other Environment variables
Environment variables within a FOR loop are expanded at the beginning of the loop and won't change until AFTER the end of
the DO section.
The following example counts the files in the current folder, but %count% always returns 1:
@echo off
SET count=1
FOR /f "tokens=*" %%G IN ('dir /b') DO (
echo %count%:%%G
set /a count+=1)
To make this work correctly we must force the variable %count% to be evaluated during each iteration, using the
CALL :subroutine mechanism:
@echo off
SET count=1
FOR /f "tokens=*" %%G IN ('dir /b') DO (call :s_do_sums "%%G")
GOTO :eof
[Link] 19/06/2006
For - Looping commands Page 2 of 2
:s_do_sums
echo %count%:%1
set /a count+=1
GOTO :eof
Nested FOR commands
FOR commands can be nested FOR %%G... DO (for %%U... do ...)
when nesting commands choose a different letter for each part. you can then refer to both parameters in the final DO command.
If Command Extensions are disabled, the FOR command will only support the basic syntax with no enhanced variables:
FOR %%parameter IN (set) DO command [command-parameters]
"Those who cannot remember the past are condemned to repeat it" - George Santayana
Related Commands:
FOR - Loop through a set of files in one folder
FOR /R - Loop through files (recurse subfolders)
FOR /D - Loop through several folders
FOR /L - Loop through a range of numbers
FOR /F - Loop through items in a text file
FOR /F - Loop through the output of a command
FORFILES - Batch process multiple files
GOTO - Direct a batch program to jump to a labelled line
IF - Conditionally perform a command
Equivalent Linux BASH commands:
cut - Divide a file into several columns
for var in [list]; do - Expand list, and execute commands
eval - Evaluate several commands/arguments
until - Execute commands (until error)
while - Execute commands
Ads by Goooooogle Advertise on this site
Windows Shell Scripting
Learn How to Write Windows Scripts in Under 2
Hours from Videos
[Link]
Easy Batch Files
Create & schedule batch files in minutes. No
coding. Download Now.
[Link]
Free SQL Server Tips
MS SQL Server Tips & Techniques Solve SQL
problems fast and free
[Link]
Simon Sheppard
[Link]
[Link] 19/06/2006