bat批处理中For的用法
时间:2010-11-06 来源:linuxfly
一、基本语法
For %variable In (set) Do command [command=parameters]
参数说明
%variable 指定一个单一字母可替换的参数
set 指定一个或一组文件,可以使用通配符。
command 指定对每个文件执行的命令。
command=parameters 命令的参数。
For %%i In (*) Do (Echo %%i)
这里使用星号通配符,表示当前目录下所有的文件。一个一个的赋予变量i。
For %%i In (a b c d) Do (Echo %%i)
这理一次将括号中的内容赋予变量i
注意:变量前要加两个百分号
二、启用命令扩展名
一共用 D、R、L、F 四个命令参数。
1.For /D %variable In (set) Do command [command=parameters]
指定通配符匹配的是目录名
For /D %%i In (*) Do (Echo %%i)
遍历当前目录下的所有目录
For %%i In (*) Do (Echo %%i)
遍历当前目录下的所有文件
2.For /R [[drive:]path] %variable In (set) Do command [command=parameters]
检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。
For %%i In (*) Do (Echo %%i)
遍历当前目录下的所有文件
For /R %%i In (*) Do (Echo %%i)
遍历当前目录下的所有文件,及其子目录中的所有文件
For /R %%i In (.) Do (Echo %%i)
遍历目录树,只显示所有目录及子目录,不显示目录中的文件
3.For /L %variable In (start,step,end) Do command [command=parameters]
该集表示一个数字序列。(1,1,5) 将产生序列(1 2 3 4 5),(1,2,5) 将产生序列 (1 3 5)。
For /L %%i In (1,1,5) Do (Echo %%i)
等同于 For %%i In (1,2,3,4,5) Do (Echo %%i)
4.For /F ["options"] %variable In (set) Do command [command=parameters]
分析文件中的内容,这个比较复杂。
options说明
eol=c
指一个行注释字符的结尾
skip=n
指在文件开始时忽略的行数
delims=xxx
指分隔符集。默认为空格和跳格键
tokens=x,y,m-n
指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
usebackq
指定新语法已在下类情况中使用: 在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 filenameset中使用双引号扩起文件名称。
批处理中For语句F参数的用法
语法
For /F ["options"] %variable In (file-set) Do command [command-parameters]
options 参数说明
eol=c
指一个行注释字符的结尾(就一个)
skip=n
指在文件开始时忽略的行数。
delims=xxx
指分隔符集。这个替换了空格和跳格键的默认分隔符集。
tokens=x,y,m-n
指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
一个简单例子
Text.txt文件内容如下:
1,小明,80,85
2,小红,90,95
#3,小强,90,95
For /F "tokens=2,* delims=, " %%i In (Text.txt) Do (Echo %%i %%j)
这里分析 Text.txt 文件中的内容,每次读取一行,每行以逗号分隔,取第2列
这样 %%i 表示第二列的内容,%%j 就是星号中的内容,星号就是第二列后面的全部内容
For /F "eol=# tokens=2,* delims=, " %%i In (Text.txt) Do (Echo %%i %%j)
和上面相比少了第三行,因为第三行以井号开头,eol=# 指定了以井号开头的行为注释行不分析
For /F "eol=# skip=1 tokens=2,* delims=, " %%i In (Text.txt) Do (Echo %%i %%j)
多了一个 skip=1,表示从跳过第一行,从第二行开始。
还可以这样
For /F "tokens=1,2,3,* delims=, " %%i In (Text.txt) Do (Echo %%i %%j %%k %%l)
可以不用参数
For /F %%i In (Text.txt) Do (Echo %%i)
这样,每次读取一行内容,显示出来。