|
|
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...
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 FOR command supports implicit parameter definitions.
The first parameter always has to be defined explicitly and this must be a single
character.
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 ...
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 simply counts up 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 :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]
"In expanding the field of knowledge, we but increase the horizon of
ignorance" - Henry
Miller
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