我是靠谱客的博主 懵懂小虾米,这篇文章主要介绍【WINDOWS / DOS 批处理】for命令详解(三),现在分享给大家,希望可以做个参考。

 for命令详解(一)【共十篇】   

 for命令详解(二)【共十篇】

 for命令详解(三)【共十篇】

 for命令详解(四)【共十篇】

 for命令详解(五)【共十篇】           

 for命令详解(六)【共十篇】

 for命令详解(七)【共十篇】   

 for命令详解(八)【共十篇】 

 for命令详解(九)【共十篇】  

 for命令详解(十)【共十篇】 

【格式三】

   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的内容如下:

复制代码
1
2
3
4
5
6
7
::demo.bat @echo off :: dir1和dir2都不是真实存在的目录 for /d %%a in (dir1 dir2) do ( echo %%a )

        运行

复制代码
1
2
3
4
5
6
C:out>dir /a:d |findstr "dir1 dir2" C:out>demo dir1 dir2 C:out>

2、set 是一个目录名列表,如果它外面加双引号(或单引号或反引号),则会改变“原义”

        示例

demo.txt的内容如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
:: 本示例包含汉字,如执行乱码,请使用 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的内容如下:

复制代码
1
2
3
4
5
6
7
8
9
::demo.bat @echo off set /a num=0 for /d %%a in ( dir1 dir2 ) do ( echo %%a set /a num+=1 ) echo num:%num%

         运行

复制代码
1
2
3
4
5
C:out>demo dir1 dir2 num:2 C:out>

 4、set 是一个目录名列表,其中的每个目录名都可以使用通配符( * 、?),通配符只能匹配当前目录下的非隐藏目录名(不能匹配文件名) 

        示例

demo.txt的内容如下:

复制代码
1
2
3
4
5
6
::demo.bat @echo off for /d %%a in (dir1 *dir* *) do ( echo %%a )

        运行

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:out>dir /s /b /a:d C:outziDir C:outziDir1 C:outziDirsun C:outziDir1sun1 C:out>dir /s /b /a:dh C:outziDir1 C:out>demo dir1 ziDir // 输出结果不会除重 ziDir C:out>

5、set 是一个目录名列表,其中的目录名支持转义字符(^)  

        示例

复制代码
1
2
3
4
5
6
::demo.bat @echo off for /d %%a in (a^a bb cc) do ( echo a: begin-%%a-end echo ---------------------------------------------- )

        运行 

复制代码
1
2
3
4
5
6
7
8
9
C:out>demo a: begin-aa-end ---------------------------------------------- a: begin-bb-end ---------------------------------------------- a: begin-cc-end ---------------------------------------------- C:out>

写作不易,本文档如能帮到您,麻烦您 “在下面一圈三连”

最后

以上就是懵懂小虾米最近收集整理的关于【WINDOWS / DOS 批处理】for命令详解(三)的全部内容,更多相关【WINDOWS内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(116)

评论列表共有 0 条评论

立即
投稿
返回
顶部