Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1488640
  • 博文数量: 226
  • 博客积分: 3997
  • 博客等级: 少校
  • 技术积分: 2369
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-19 17:26
个人简介

Never save something for a special occasion. Every day in your life is a special occasion.

文章分类

全部博文(226)

文章存档

2018年(5)

2017年(11)

2016年(1)

2015年(17)

2014年(14)

2013年(30)

2012年(5)

2011年(52)

2010年(107)

for

分类:

2010-12-28 19:53:32

For
对一组文件中的每个文件运行指定的命令。

用法(批处理中%要双写):
for %variable in (set) do command [command-parameters]

参数:

%%variable 或 %variable
代表可替换的参数。for 命令使用在 set 中指定的每个文本字符串替换 %%variable(或 %variable),直到此命令(在 command-parameters 中指定)处理所有的文件为止。注意,变量名区分大小写。

(set)
目标集——文件(s)或文本字符串。

command
要在每个目标上执行的命令。

command-parameters
command的参数。

如果启用了命令扩展,将支持如下 for 命令的其他格式:

/D 限于目录
for /D [%% | %]v in (set) docommand [command-parameters]

如果 set 包含通配符(* 和 ?),则指定与目录名匹配,而不是文件名。

/R 递归
for /R [[drive :]path] [%% | %]v in (set) docommand [command-parameters]

遍历目录树[drive:]path。若未指定 [drive:]path 则默认为当前目录。如果 set 只是一个句号 (.) 字符,则只列举目录树。

/L 数列
for /L [%% | %]v in (start,step,end) do command [command-parameters]

数列示例:
(1,1,5) 即 1 2 3 4 5
(5,-1,1) 即 5 4 3 2 1

/F 文件解析
for /F ["options"] [%% | %]v in (filenameset) do command [command-parameters]
for /F ["options"] [%% | %]v in ("literal string") do command[command-parameters]
for /F ["options"] [%% | %]v in ('command') do command [command-parameters]

或者,如果出现 usebackq 选项:

for /F ["options"] [%% | %]v in (filenameset) do command [command-parameters]
for /F ["options"] [%% | %]v in ('literal string') do command [command-parameters]
for /F ["options"] [%% | %]v in (`command`) docommand [command-parameters]

filenameset 参数指定文件集。在继续到 filenameset 中的下一个文件之前,每个文件都会被打开、读取和处理。

针对每个文件,每一次for循环将读取一个文本行,根据delims指定的字符将文本行分割为域,第一个域赋值给%v,第二个域赋值给%(v+1),依此类推。完成一个文本行后进入下一次for继续处理下一行,直到所有文件都处理完。
通过“options”参数可以覆盖默认的解析行为。这是一个引用字符串,它包含一个或多个关键字以指定不同的解析选项。关键字是:

关键字 说明
eol=c 指定行尾注释字符(只一个字符)
skip=n 指定在文件的开头跳过的行数。
delims=xxx 指定定界符集合。这将替换空格和制表符的默认分隔符集。
tokens=x,y,m-n 指定将令牌从每行传递到每个反复的正文。这将导致分配其他变量名。m-n 格式是一个范围,指定从 mth 到 nth 的令牌。如果在令牌 = 字符串中最后一个字符是星号,则将分配附加的变量,并在解析最后一个令牌后在行上接收剩余的文本。
usebackq 指定将右引号字符串作为命令执行,单引号字符串是文字字符串命令,您可以使用双引号包括 filenameset 中的文件名。

变量替换

此外,已经增强了 for 变量引用的替换修改程序。现在可以使用下列可选的语法(对于任何变量 I):

变量(使用修改程序) 说明
%~I 展开删除了周围的任何引号 (") 的 %I
%~fI 将 %I 展开到完全合格的路径名
%~dI 只将 %I 展开到驱动器号
%~pI 只将 %I 展开到路径
%~nI 只将 %I 展开到文件名
%~xI 只将 %I 展开到文件扩展名
%~sI 展开路径以只包含短名称
%~aI 将 %I 展开到文件的文件属性
%~tI 将 %I 展开到文件的日期/时间
%~zI 将 %I 展开到文件大小
%~$PATH:I 搜索 PATH 环境变量所列出的目录,并将 %I 展开开到第一个找到结果的全部合格名称。如果没有定义环境变量名,或搜索后没有找到文件,则此修改程序将扩展为空字符串。

修改程序可以合并以获得复杂的结果:

变量(使用合并的修改程序) 说明
%~dpI 只将 %I 展开到驱动器号和路径
%~nxI 只将 %I 展开到文件名和扩展名
%~fsI 将 %I 展开到只包含短名称的完整路径名
%~dp$PATH:I 在 PATH 环境变量所列出的目录中搜索 %I,并展开到第一个找到结果的驱动器号和路径
%~ftzaI 将 %I 扩展到与 dir 相似的输出行

例:要显示当前目录中扩展名为 .doc 或 .txt 的所有文件内容:
for %f in (*.doc *.txt) do type %f

 
 
实例:
 
阅读(994) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~