目录结构:
contents structure [+]
一.简介
在DOS窗口中,输入for /?查看官方给出的for命令的用法。
FOR %variable IN (set) DO command [command-parameters]%variable 指定一个单一字母可替换的参数。(set) 指定一个或一组文件。可以使用通配符(* 和 ?)。command 指定对每个文件执行的命令。command-parameters 为特定命令指定参数或命令行开关。 现在开始讲每个参数的意思
二.for /d ... in ...
/d表示目录搜索,它主要用于搜索目录,不会搜索文件。
for命令的格式为:FOR /D %%variable IN (set) DO command 如果set包含通配符,将对set想匹配的每个目录执行Command,%%variable代表了每一个目录。2.1 案例
案例:打印C://根目录下所有的文件夹名称
@echo offrem 进入到c盘根目录c:rem 打印当前目录下的所有文件夹名称for /d %%i in (*) do @echo %%ipause
案例:打印当前路径下,只有1-3个字母的文件夹名称
@echo offfor /d %%i in (???) do @echo %%ipause
案例:显示所有以window开始的文件夹名称
@echo offrem 进入到C盘c:rem 显示所有以window开始的文件夹名称for /d %%i in (window?) do @echo %%ipause
三.for /r ... in ...
/r表示递归,以递归的方式对当前目录下的每个目录执行操作。
for命令的格式为:FOR /R [[drive:]path] %%variable IN (set) DO command中括号[]表示可有可无,如果不指定开始递归的根目录,则以当前目录作为递归的根目录。这里需要注意,若set为点(.),则只枚举目录树。3.1 案例
案例:显示C盘中所有以.exe结尾的文件名
@echo offfor /r c: %%i in (*.exe) do @echo %%ipause
案例:显示当前目录及子目录下的所有以.exe结尾的文件名
@echo offfor /r %%i in (*.exe) do @echo %%ipause
案例:显示当前目录及子目录的所有目录名
@echo offfor /r %%i in (.) do @echo %%ipause
四.for /L ... in ...
/L可以写成小写字母的/l,为了和数字1区分,下面还是用大写的字母L。
/L表示迭代变量,在给定的起点、步长、终点迭代数据。for命令的格式:for /L %%Variable in (Start#,Step#,End#) do Command 使用迭代变量设置起始值 (Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (End#)。/L 将通过对 Start# 与 End# 进行比较来执行迭代变量。如果 Start# 小于 End#,就会执行该命令。4.1案例
案例:打印1到5
@echo offfor /L %%i in (1,1,5) do @echo %%ipause
案例:增加5个CMD窗口
@echo offfor /L %%i in (1,1,5) do start cmdpause
五.for /f ... in ...
含有/f的for命令使用最多,
for命令的格式:FOR /F ["options"] %%i IN (file) DO commandFOR /F ["options"] %%i IN ("string") DO commandFOR /F ["options"] %%i IN (command) DO commandfile代表一个或多个文件string 代表字符串command代表命令["options"] 可选
@echo offtype a.txtpause
显示如下:
第1行第1列 第1行第2列 第1行第3列第2行第1列 第2行第2列 第2行第3列第3行第1列 第3行第2列 第3行第3列
使用for命令同样也可以完成这个功能:
@echo offfor /f "delims=\n" %%i in (a.txt) do echo %%i pause
其中delims=\n表示以换行符分割。
5.1 常用关键字
5.1.1 delims关键字
delims关键字表示分隔符,需要注意若不指定delims那么,默认以空格和Tab键分割。如果按照下面的格式使用空格来显示的话:
@echo offfor /f %%i in ("asas daa") do @echo %%ipause
上面的语句会显示asas。
@echo offfor /f "delims= " %%i in (a.txt) do echo %%i pause
显示:
第1行第1列第2行第1列第3行第1列
可以看出值显示了第一列的值
5.1.2 tokens关键字
tokens命令可以指定显示哪一列的数据,该命令还支持通配符(*)
@echo offfor /f "tokens=2,3 delims= " %%i in (a.txt) do @echo %%i %%jpause
效果:
第1行第2列 第1行第3列第2行第2列 第2行第3列第3行第2列 第3行第3列
在上面的命令中多了%%j,这是for命令自动添加上的,通过"tokens=2,3 delims= "表示以空格为分割符号,取没行的第2和第3列数据。并且把第列的数据赋值给%%i,把第三列的数据赋值给%%j。如果要把第二列和第三列显示到同一列,那么可以把tokens=2,3换为tokens=2-3。
对于通配符就是把这一行或是剩下的全部元素作为一列数据
@echo offfor /f "tokens=1,*" %%i in (a.txt) do @echo %%i %%jpause
显示:
第1行第1列 第1行第2列 第1行第3列第2行第1列 第2行第2列 第2行第3列第3行第1列 第3行第2列 第3行第3列
5.1.3 skip和eol关键字
skip就是要忽略文件的前多少行,而eol用来指定当一行以什么符号开始时,就忽略它。
@echo offfor /f "skip=2 tokens=*" %%i in (a.txt) do @echo %%ipause
5.2 显示当前目下的下的所有文件名
@echo offrem 启用延迟变量setlocal enabledelayedexpansion set /a v=1for /f "delims=." %%i in ('dir /b/a-d/oN *.*') do ( set /a v+=1 set temp=%%i @echo 第!v!个文件名:!temp!)pause