bat脚本中的for循环
qingheluo2020-06-29清河洛364
bat脚本的for语句基本形态如下:在cmd窗口中:for option %variable in (set) do command在批处理文件中:for option %%variable in (set) do command variable:是一个单字母(区分大小写)可替换的参数
set:指定一个或一组元素(可以使用通配符),多个元素之间,用空格键、tab、逗号、分号或等号分隔
command:指定每次循环执行的命令
option:指定参数或某个功能开关
在cmd窗口和批处理文件两种环境下的差异是:在cmd窗口中,形式变量variable必须使用单百...
bat脚本的for语句基本形态如下:
在cmd窗口中:for option %variable in (set) do command
在批处理文件中:for option %%variable in (set) do command
variable:是一个单字母(区分大小写)可替换的参数 set:指定一个或一组元素(可以使用通配符),多个元素之间,用空格键、tab、逗号、分号或等号分隔 command:指定每次循环执行的命令 option:指定参数或某个功能开关
在cmd窗口和批处理文件两种环境下的差异是:在cmd窗口中,形式变量variable必须使用单百分号引用;而在批处理文件中,必须使用双百分号
for语句的基本要素:
for、in和do是语句的关键字,三个缺一不可; %%variable是对形式变量的引用,即使在do后的语句中没有参与语句的执行,也是必须出现的; set外面的括号不能省略;
set的应用:
简单的多元素:
for %%i in (a,b) do echo %%i 运行显示: a b
遍历目录(默认会递归的遍历所有子目录):
for %%i in (*.txt) do echo %%i 该语句会遍历当前所在目录下及所有子目录下的txt文件
option选项:
/D :只遍历目录,忽略不显示文件 /R "path" :指定要遍历的目录(默认为"."表示当前目录) /L :使用该选项则set应该是一个表示以增量形式从开始到结束(start,step,end)的数字序列 如for /L %%i in (1,2,5) do echo %%i 表示1,3,5 for /L %%i in (5,-1,2) do echo %%i 表示5,4,3,2 /F :用来处理文件和命令的输出结果 当set为多个文件集合时:for会依次将set中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行为一个元素,忽略空白的行。用%%variable依次代替每个元素,然后执行do后面的命令 当set为反单引号括起来时,作为系统命令执行,其输出会被捕获到内存中,并被当作文件分析 当set为多个单引号包含的字符串集合时,每个字符串作为一行,依次全部读取到内存,并被当作文件分析 eol=x :忽略以指定字符(只能指定一个)开头的行 skip=n :指在文件开始时忽略的行数 delims=xxx :指定分隔符(可以指定多个),默认为空格和tab tokens=a,b,...[*] :指定每行由分隔符分割完之后要显示的列,一般和delims配合使用 遇到分割符之后,会自动分配变量 如variable为i,则会把第一个要显示的列(第a列)分配给%%i,第b列分配给i字母后面的一个字母即%%j,以此类推 如variable为m,则第a列分配给%%m,第b列分配给m字母后面的一个字母即%%n 如果最后一个是星号(*),显示列里面最大的数字之后的所有列以一个整体全部显示(不在分割) usebackq : 1.把反单引号(英文输入状态下按tab上面数字键1左边的按键)包含的字符串作为命令; 2.允许使用双引号扩起文件名称。不加此选项双引号会被理解文件名的字符
如11.txt文件内容为:
11-12-13-14-15-16-17 #21 22 23 24 25 26 27 31 32 33-34 35 36 37 41-42-43-44-45-46-47
for语句:
for /F "eol=# delims=- tokens=3,1,4,*" %%a in (11.txt) do echo (1)%%a (2)%%b (3)%%c (4)%%d 显示结果为: (1)11 (2)13 (3)14 (4)15-16-17 (1)31 32 33 (2) (3) (4) (1)41 (2)43 (3)44 (4)45-46-47
解析:
1、eol=#表示以井号开头的行忽略,所以没有显示第2行 2、delims=-表示以减号作为分隔符 3、tokens=3,1,4,*表示显示第3,1和4列,显示列里面最大的数字4之后的列以一个整体全部显示,第2列不会显示出来 4、tokens后面的数字顺序不重要,显示会按照数字大小排列 5、第1分配给变量%%a(由for语句指定),那么后面要显示的第3列和第4列会自动分配给变量%%b和%%c(字母a后面紧跟着的字母),最后星号表示的列继续向后分配给变量%%d