您的位置:首页 > 其它

For 命令的使用

2010-02-23 15:42 204 查看
For 命令用于对一系列文件执行一个特定的命令,也有很多扩展,如下文, 功能很强大,使用有点麻烦。

它的完整语法是:

For %variable IN (set) Do command [command-parameters]

其中:

%variable 是单字母变量

set 是一个或者多个文件,可使用通配符

command 是对 set 中的每一个文件要执行的命令,可以是系统命令,脚本,第三方程序等。

注意:

如果在批处理中使用For命令,应该将 %variable 改为 %%variable

批处理文件中,变量名是区分大小写的,也就是说 %a 和 %A 是不同的

如果enable了命令扩展,可以支持以下的额外形式和额外功能。

加入/D: For /D %variable IN (set) Do command [command-parameters]
功能: set 中如果有通配符,将用来匹配目录名,而不是基本命令中的文件名。也就是说,对set中的每个目录执行特定的命令

加入/R: For /R [ [drive: ] path ] IN (set) Do command [command-parameters]
功能: 从[drive: ] path 开始,对所有目录和子目录执行特定的命令。 如果 [drive: ] path 为空,没有指定任何目录,则仅对当前目录执行 For 命令。 如果 set 是一个 “ . ” 点号,则仅枚举目录

加入 /L: FOR /L %variable IN (start,step,end) DO command [command-parameters]
功能: 这时,set是一个数列,start是起始数, step是增加量,end是终止数。 对这个数列执行特定的命令。

加入 /F:

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]

file-set 是一个或者多个文件名,每个文件都被打开,读取,处理。读取时,每个文件都被分为单个的行(忽略空行),每行都解析为 0个或者多个 token。 For 语句然后将token的值 赋与 %variable 变量。 缺省时, /F 传递每个文件中的每行中的第一个分离的token。可以用 option 来修改这个缺省的解析行为。

Option 中的关键字是:

eol=c 指定一个行注释字符(忽略这个字符起始的行)

skip=n 指定忽略文件中最开始的n行

delims=xxx 指定分隔符,缺省时,使用空格和tab作为分隔符

Tokens=x,y,m-n

指定应该将哪些 token 的值传送给 For 命令中的 特定命令去处理

如果指定了多个token,就会自动分配多个变量

m-n 是制定范围来设置传值的token

Token= 的如果最后一个字符是星号"*",则自动分配额外的变量,来接收从最后一个token之后的行内的剩余文字。

usebackq 指定使用特别字符,这是的命令语法就是

FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters]
也就是 “” 双引号变成 ‘ ‘ 单引号。 ’ ‘ 单引号变成 ` ` 反引号 (就是 “ ~ ” 这个键)

样例:

FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k

解析 myfile.txt, 忽略分号起始的行,以逗号或者空格为分隔符,解析每行第二个和第三个token。第二个token的值赋给 %i, 第三个token的值赋给 %j ,其它token的值赋给%k (%j, %k 是隐式自动创建的)。 如果文件名中有空格,应该用双引号括起来。Token行最多指定26个token

还可以使用 For /F 来解析一个字符串: 在 set 中使用 单引号,这时,set 段就会被当做一个文件中的一行来处理。

还可以使用 For /F command 来解析命令输出: 在 set 中使用反引号,这时,set段会被当做一个命令行并传递给一个子cmd.exe,它的输出会被捕捉到内存中并被解析,就好像它是一个文件一样。

还可以有以下修饰符来增强 For 变量代换:
%~I 扩展 %I,删除包围的引号 “” ----- %I --- 大写的 i
%~fI 扩展 %I 为完全路径名
%~dI 扩展 %I 为仅驱动器字符
%~pI 扩展 %I 为仅路径名
%~nI 扩展 %I 为仅文件名
%~xI 扩展 %I 为仅文件扩展名
%~sI 扩展 %I 为包括短文件名的路径
%~aI 扩展 %I 为完全路径名
%~tI 扩展 %I 为文件的日期时间
%~zI 扩展 %I 为文件大小
%~$PATH:I 搜索PATH变量,将 %I 扩展为发现的第一个完全路径。如果PATH环境变量未定义或者文件未找到,则扩展为空字符串

修饰符可以叠加,例如

%~dpI 扩展为驱动器符和路径名
%~nxI 扩展为文件名和扩展名
%~fsI 扩展为完全路径名+短文件名
%~dp$PATH:I
%~ftzaI

Ok,先到这里,以后再举例说明
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: