Conditionally perform a command on several folders.
Syntax
FOR /D [/r] %%parameter IN (folder_set) DO command
Key
folder_set : A set of one or more folders. Wildcards must be used.
command : The command to carry out, including any
command-line parameters.
%%parameter : A replaceable parameter:
in a batch file use %%G (on the command line %G)
/r : Recurse into subfolders (see notes below)
In all cases for /d will start searching from the current directory.
Unlike other variants of the FOR command you must include a wildcard (either * or ?) in the 'folder_set' to get consistent results returned. In many cases you can work around this by adding a single character wildcard e.g. if you are looping through multiple folders to find the exact folder January you could instead specify Janu?ry
The option /d /r is undocumented and somewhat buggy, it fails for root folders. For /r is often a better choice.
An alternative method is to retrieve a list of folders and sub folders with the DIR command:
C:\> dir /ad /s /b "C:\Work"
Wrapping that in a FOR /f command will loop through each folder:
C:\> for /f "tokens=*" %G in ('dir /ad /s /b "C:\Work"') do echo Found %G
Example
List every subfolder, below the folder C:\Work\ that has a name starting with "User":
C:\> CD \Work
C:\> FOR /D /r %G in ("User*") DO Echo ***Found folder: %G
"I knew of one little DO loop that ran for 48 hours, cost $14,000 and did
nothing" -
Balfour and Marwick
Related Commands:
FOR - Loop commands
FOR - Loop through a set of files in one folder
FOR /R - Loop through files (recurse subfolders)
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
Powershell: ForEach-Object - Loop for each object in the pipeline
Equivalent bash command (Linux):
for - Expand words, and execute commands