【格式三】
FOR /D %variable IN (set) DO cmd [cmd-parameters]
【
注意
】DO后面必须存在空白,即使do后面是左括号
【%variable参数】
variable 指定一个名称为单一字母的循环变量名,例如:%V,variable 区分大小写,所以 %V 不同于 %v。for命令用于批处理文件中时,%variable 必须写为 %%variable
【cmd参数】
指定对每个文件执行的命令
【cmd-parameters参数】
指定cmd的参数
【set参数】
在【格式三】中,
set
被看作一个使用一个或多个空格分隔的目录名列表
【/D参数】
指定
set
是一个使用一个或多个空格分隔的目录名列表
工作原理
对于
set
中以空白分隔的每一个目录名,
- 如果它包括通配符,则for命令会在当前目录下查找匹配它的目录,并找到的目录名赋值给%variable,并执行 cmd [cmd-parameters];如果没有找到匹配它的目录,则for命令会忽略它;
- 如果它不包括通配符,则for命令直接把它赋值给%variable,并执行 cmd [cmd-parameters] ,而不会在当前目录下查找它,也就是说,与它是否存在无关。
【格式三命令功能】
- 要遍历当前目录下的非隐藏目录,set中的目录名称必须使用通配符
- 要分割“以空白分隔的字符串”,set中的目录名称不能使用通配符
1、set 是一个目录名列表,其中的目录
名可以是不存在的
示例
demo.txt的内容如下:
::demo.bat
@echo off
:: dir1和dir2都不是真实存在的目录
for /d %%a in (dir1 dir2) do (
echo %%a
)
运行
C:\out>dir /a:d |findstr "dir1 dir2"
C:\out>demo
dir1
dir2
C:\out>
2、set 是一个目录名列表,如果它外面加双引号(或单引号或反引号),则会改变“原义”
示例
demo.txt的内容如下:
:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码 【标注一】
::demo.bat
@echo off
:: "x.txt y.txt"被看作一个文件名
for /d %%a in ("x.txt y.txt") do (
echo %%a
)
echo ------------------------------
:: 单引号被看作普通字符
for /d %%a in ('x.txt y.txt') do (
echo %%a
)
echo ------------------------------
:: 反引号被看作普通字符
for /d %%a in (`x.txt y.txt`) do (
echo %%a
)
【标注一】
下载Notepad++
运行
3、
set 是一个使用一个或多个空格分隔的目录名列表,set 开头和末尾的空白(一个或多个空格)会被忽略
示例
demo.txt的内容如下:
::demo.bat
@echo off
set /a num=0
for /d %%a in ( dir1 dir2 ) do (
echo %%a
set /a num+=1
)
echo num:%num%
运行
C:\out>demo
dir1
dir2
num:2
C:\out>
4、set 是一个目录名列表,其中的每个目录名都可以使用通配符( * 、?),通配符只能匹配当前目录下的非隐藏目录名(不能匹配文件名)
示例
demo.txt的内容如下:
::demo.bat
@echo off
for /d %%a in (dir1 *dir* *) do (
echo %%a
)
运行
C:\out>dir /s /b /a:d
C:\out\ziDir
C:\out\ziDir1
C:\out\ziDir\sun
C:\out\ziDir1\sun1
C:\out>dir /s /b /a:dh
C:\out\ziDir1
C:\out>demo
dir1
ziDir // 输出结果不会除重
ziDir
C:\out>
5、set 是一个目录名列表,其中的目录名支持转义字符(^)
示例
::demo.bat
@echo off
for /d %%a in (a^a bb cc) do (
echo a: begin-%%a-end
echo ----------------------------------------------
)
运行
C:\out>demo
a: begin-aa-end
----------------------------------------------
a: begin-bb-end
----------------------------------------------
a: begin-cc-end
----------------------------------------------
C:\out>
写作不易,本文档如能帮到您,麻烦您
“在下面一圈三连”
。