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

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

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

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

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

【格式四】

FOR   /D   /R  [ [drive:]path] ]  %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 是一个使用一个或多个空格分隔的目录名列表

/R   [ [drive:]path] ] 参数

path  指定将要递归遍历的根目录名称

drive 指定 path 所在的驱动器,例如:C、D

/R  [ [drive:]path ]   把 [drive:]path 指定为将要递归遍历的根目录,如果在 /R 后没有指定目录,则缺省值为当前目录。

  • 如果 [drive:]path 在磁盘真实存在,则for命令会递归遍历它
  • 如果 [drive:]path 在磁盘不存在,则 [drive:]path 被看作一个空目录
  • 如果 [drive:]path 包含通配符,则for命令不报错且自动退出(没有任何输出)
  • [drive:]path 只能指定单个目录

示例

demo.bat的内容如下:

::demo.bat
@echo  offfor /d /r out %%a in (x.txt) do echo %%a
echo -------------------------------
for /d /r c:\out %%a in (x.txt) do echo %%a
echo -------------------------------
for /d /r c:\noDir %%a in (x.txt) do echo %%a
echo -------------------------------
for /d /r o?t %%a in (x.txt) do echo %%a

运行

C:\out>dir /s /b /a:d
C:\out\ziDir
C:\out\ziDir1
C:\out\ziDir\sun
C:\out\ziDir1\sun1C:\out>dir /s /b /a:-d
C:\out\a.txt
C:\out\b.txt
C:\out\c.txt
C:\out\demo.bat
C:\out\rd
C:\out\ziDir\c.txt
C:\out\ziDir\sun\d.txtC:\out>demo
C:\out\out\x.txt
-------------------------------
c:\out\x.txt
c:\out\ziDir\x.txt
c:\out\ziDir\sun\x.txt
c:\out\ziDir1\x.txt
c:\out\ziDir1\sun1\x.txt
-------------------------------
c:\noDir\x.txt
-------------------------------
C:\out>

【set参数】 

在【格式四】中,set 被看作一个使用一个或多个空格分隔的目录名列表

工作原理

对于 set 中以空白分隔的每一个目录名,

  • 如果它包括通配符,则在磁盘的 [drive:]path 目录下递归查找匹配它的目录,然后把找到的所有目录名分别:赋值给%variable,并执行 cmd [cmd-parameters];如果没有找到匹配它的目录,则for命令会忽略它;
  • 如果它不包括通配符(这种情况下,for命令不会到磁盘中查找它,即:与它是否存在无关),则以 [drive:]path 为根目录,把递归到的所有子目录(包括隐藏目录)的完整路径名称,分别连接它,从而构成一个包含完整路径的目录名的列表,再把该列表的所有目录名分别:赋值给%variable,并执行 cmd [cmd-parameters]

【格式四命令功能】

  • 要递归遍历某个目录下的非隐藏目录名,set中的目录名称中必须使用通配符
  • 在文件名前面添加某个目录中的所有目录,set中的目录名称中不能使用通配符

1、set 是一个目录名列表,其中的目录名可以是不存在的

        示例

demo.txt的内容如下:

::demo.bat
@echo  off
for /d /r %%a in (aa   bb) do (
echo %%a
)

运行

C:\out>where /r . aa
信息: 用提供的模式无法找到文件。C:\out>where /r . bb
信息: 用提供的模式无法找到文件。C:\out>dir /s /b /a:d
C:\out\ziDir
C:\out\ziDir1
C:\out\ziDir\sun
C:\out\ziDir1\sun1C:\out>demo
C:\out\aa
C:\out\bb
C:\out\ziDir\aa
C:\out\ziDir\bb
C:\out\ziDir\sun\aa
C:\out\ziDir\sun\bb
C:\out\ziDir1\aa
C:\out\ziDir1\bb
C:\out\ziDir1\sun1\aa
C:\out\ziDir1\sun1\bb
C:\out>

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

        示例

demo.txt的内容如下:

:: 本示例包含汉字,如执行乱码,请使用 Notepad++ 把本文档转化成ANSI编码  【标注一】
::demo.bat
@echo  off:: "x.txt y.txt"被看作一个文件名
for /r /d %%a in ("x.txt y.txt") do (
echo %%a
)
echo ------------------------------
:: 单引号被看作普通字符
for /r /d %%a in ('x.txt y.txt') do (
echo %%a
)echo ------------------------------
:: 反引号被看作普通字符
for /r /d %%a in (`x.txt y.txt`) do (
echo %%a
)

【标注一】   下载Notepad++

运行

C:\out>dir /b /s /a:d
C:\out\ziDir
C:\out\ziDir1
C:\out\ziDir\sun
C:\out\ziDir1\sun1C:\out>demo
C:\out\"x.txt y.txt"
C:\out\ziDir\"x.txt y.txt"
C:\out\ziDir\sun\"x.txt y.txt"
C:\out\ziDir1\"x.txt y.txt"
C:\out\ziDir1\sun1\"x.txt y.txt"
------------------------------
C:\out\'x.txt
C:\out\y.txt'
C:\out\ziDir\'x.txt
C:\out\ziDir\y.txt'
C:\out\ziDir\sun\'x.txt
C:\out\ziDir\sun\y.txt'
C:\out\ziDir1\'x.txt
C:\out\ziDir1\y.txt'
C:\out\ziDir1\sun1\'x.txt
C:\out\ziDir1\sun1\y.txt'
------------------------------
C:\out\`x.txt
C:\out\y.txt`
C:\out\ziDir\`x.txt
C:\out\ziDir\y.txt`
C:\out\ziDir\sun\`x.txt
C:\out\ziDir\sun\y.txt`
C:\out\ziDir1\`x.txt
C:\out\ziDir1\y.txt`
C:\out\ziDir1\sun1\`x.txt
C:\out\ziDir1\sun1\y.txt`
C:\out>

3、set 是一个使用一个或多个空格分隔的目录名列表,set 开头和末尾的空白(一个或多个空格)会被忽略

        示例

::demo.bat
@echo  off
set /a num=0
for /r /d %%a in (    dir1  dir2    ) do (
echo %%a
set /a num+=1
)echo num:%num%

demo.txt的内容如下:

运行

C:\out>demo
C:\out\dir1
C:\out\dir2
C:\out\ziDir\dir1
C:\out\ziDir\dir2
C:\out\ziDir\sun\dir1
C:\out\ziDir\sun\dir2
C:\out\ziDir1\dir1
C:\out\ziDir1\dir2
C:\out\ziDir1\sun1\dir1
C:\out\ziDir1\sun1\dir2
num:10
C:\out>

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

        示例

demo.txt的内容如下:

::demo.bat
@echo  offfor /r /d %%a in (dir1  *dir* *) do (
echo %%a
)

运行

C:\out>dir /s /b /a:hd
C:\out\ziDir1C:\out>demo
C:\out\dir1
C:\out\ziDir
C:\out\ziDir          // 输出结果不会除重
C:\out\ziDir\dir1
C:\out\ziDir\sun
C:\out\ziDir\sun\dir1
C:\out\ziDir1\dir1
C:\out\ziDir1\sun1
C:\out\ziDir1\sun1\dir1
C:\out>

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

示例

::demo.bat
@echo  off
for /r /d %%a in (a^a bb cc) do (
echo a:  begin-%%a-end
)

运行 

C:\out>demo
a:  begin-C:\out\aa-end
a:  begin-C:\out\bb-end
a:  begin-C:\out\cc-end
a:  begin-C:\out\one two\aa-end
a:  begin-C:\out\one two\bb-end
a:  begin-C:\out\one two\cc-end
a:  begin-C:\out\ziDir\aa-end
a:  begin-C:\out\ziDir\bb-end
a:  begin-C:\out\ziDir\cc-end
a:  begin-C:\out\ziDir\sun\aa-end
a:  begin-C:\out\ziDir\sun\bb-end
a:  begin-C:\out\ziDir\sun\cc-end
a:  begin-C:\out\ziDir1\aa-end
a:  begin-C:\out\ziDir1\bb-end
a:  begin-C:\out\ziDir1\cc-end
a:  begin-C:\out\ziDir1\sun1\aa-end
a:  begin-C:\out\ziDir1\sun1\bb-end
a:  begin-C:\out\ziDir1\sun1\cc-endC:\out>

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

【WINDOWS / DOS 批处理】for命令详解(四)相关推荐

  1. 终极dos批处理循环命令详解

    ---恢复内容开始--- 终极dos批处理循环命令详解 格式:FOR [参数] %%变量名 IN (相关文件或命令) DO 执行的命令作用:对一个或一组文件,字符串或命令结果中的每一个对象执行特定命令 ...

  2. DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~)

    DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~) --- --- 前言: 虽然以前对批处理也算有点研究,但一直对for命令理解不够透彻,偶尔用时也是照猫画虎的用一下. 虽然 ...

  3. 批处理for命令详解(转) 批处理for命令详解

    批处理for命令详解(转) 批处理for命令详解 2008-03-07 11:00 FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能! 看看他的基本格式(这里我引用的是批处理中的格式,直 ...

  4. 批处理if 命令详解

    批处理(bat)if 命令详解 一.语法规则 1.if命令5钟用法 if "字符串1"=="字符串2" command 语句 #判断两个字符串是否相等 if 数 ...

  5. windows/NBTSTAT,linux/nmblookup命令详解,查询NetBIOS名

    NBTSTAT命令详解 请问: Linux下有没有和nbtstat一样的命令,用 nmblookup -A ip 可以 nbstat命令主要用于查看当前基于netbios的tcp/ip连接状态,通过该 ...

  6. 批处理---findstr命令详解

    在文件中寻找字符串. FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file] [/C:string] ...

  7. windows快捷键及运行命令详解 PPS网络电视下载和介绍

    WINVER检查WINDOWS版本 DXDIAG检查DIRECTX信息 MEM.EXE显示内存使用情况 SNDVOL32音量控制程序 SFC.EXE系统文件检查器 GPEDIT.MSC 组策略 REG ...

  8. Windows系统cmd常用命令详解

    刚接触电脑的的时候是DOS系统, 根本就没有Windows系统这样的图形化操作界面, 只有一个黑漆漆的窗口,让你输入命令. 大多数程序员或计算机专家在DOS系统下的操作是非常了得的, 所以想要成为计算 ...

  9. Windows系统 services.msc命令详解,Windows命令行查看本地服务

    「作者主页」:士别三日wyx 第一步.打开cmd 按下 win 键,输入 cmd 后回车,打开「命令提示符」 第二步.查看系统版本 在打开的cmd窗口中,输入 services.msc 后回车,即可在 ...

  10. DOS环境dir命令详解

    首先,在 DOS 环境下,如果想查看 dir 命令的用法,可以键入命令 dir /? 如果想按文件名的字母顺序显示文件,可以键入命令 dir /ON.其中,O 是英文单词 order(顺序)的首字母, ...

最新文章

  1. python基础:购物车的简单实现
  2. mysql设计数据集市_数据集市设计
  3. 使用分发列表过滤BGP路由
  4. 运用Parcelable将类序列化并绑定给Intent
  5. 核函数(Kernel Function)与SVM
  6. 把ATmega128开发板转为Arduino
  7. 医院信息化建设,产品规划要求​
  8. 谈谈我对上手MacOS的体验与macos常用快捷键总结
  9. C语言编辑bmi计算器,使用事件处理程序的BMI计算器计算
  10. vue 获取input光标位置,并实现插入模板语法。
  11. 【100个 Unity小知识点】☀️ | Unity 中怎样读取Excel文件
  12. 全网最简单的百度网盘提速方法!!!!
  13. git 本地仓添加多个远端仓库
  14. 读《互联网创业的四种玩家》有感
  15. 如何下载什刹海街道卫星地图高清版大图
  16. 数据结构9-双指针(尺取法)(double pointer)
  17. Variadic Templates(一)- 可变参数模板
  18. 关于psv破解中finalhe显示“sha256不匹配,请检查网络状态”的问题的解决办法!
  19. WordPress SEO 宝典
  20. 语音分离---学习笔记(1)

热门文章

  1. 2016c语言模拟试卷A,2016C语言习题模拟试卷一.doc
  2. HTML5+CSS3实现小米商城 (完整版)
  3. Gophish:开源网络钓鱼工具包
  4. 蓝牙耳机ENC通话降噪测试-自适应滤波技术
  5. 老站长教你如何启用网站统计工具
  6. Microsoft Office Visio 2007打开总是显示Windows正在配置...请稍后解决办法
  7. 私服github开源项目
  8. 实况足球2017 for mac打不开怎么办?10.13系统无法运行实况足球2017 for mac是什么原因?
  9. android手势密码源码,Android自定义UI手势密码改进版源码下载
  10. 几道web前端面试题