Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1020470
  • 博文数量: 87
  • 博客积分: 3324
  • 博客等级: 中校
  • 技术积分: 1003
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-17 11:37
文章分类

全部博文(87)

文章存档

2014年(3)

2013年(5)

2012年(21)

2011年(13)

2010年(7)

2009年(9)

2008年(4)

2007年(14)

2006年(11)

分类: WINDOWS

2009-08-12 18:50:35

最近在研究批处理文件中FOR循环的用法时,发现对于FOR /F的用法,帮助文件以及在互联网上都没有什么文章讲的比较清楚,所以特别仔细钻研了一下,现将成果与各位分享,欢迎批评指正。

FOR /F 的用法主要有以下三种:

for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) do command [CommandLineOptions]

for
/F ["ParsingKeywords"] {%% | %}variable in ("LiteralString") do command [CommandLineOptions]

for
/F ["ParsingKeywords"] {%% | %}variable in ('command') do command [CommandLineOptions]

下面分别对上面三种用法进行解释:
用法1:for循环对于filenameset中的文件,一次获取每个文件的每一行,根据ParsingKeywords的设定,进行匹配.匹配的记过存入%%后面的变量名中.如果不提供ParsingKeywords,则使用默认值,即对每行以空格和TAB为分割符号,将第一个分割符号前面的内容,放入%%指名的变量中.加入我们有一个文件叫a.txt,该文件有两行内容,第一行的内容为Tom is good.第二行为Jack is good.则执行下面的语句(本文中所有的执行,都是指在batch file中执行,不是指在命令行上执行,下面的内容对此不在另行说明):
FOR /F %%A in (a.txt) ECHO %%A
输出为:
Tom
Jack

用法2:for循环对于LiteralString这个字符串(字符串一定要用双引号引起来,否则将被视为文件名称的集合),根据ParsingKeywords的设定,进行匹配.匹配的记过存入%%后 面的变量名中.如果不提供ParsingKeywords,则使用默认值,即对此字符串以空格和TAB为分割符号,将第一个分割符号前面的内容,放入%%指名 的变量中.假如我们执行下面的语句:
FOR /F %%A in ("Hello World!") ECHO %%A
输出为:
Hello

用法3: for循环处理的内容,来自in后面括号中command命令的执行结果,特别注意command要使用backtick符号引起来.command换成自己要执行的命令.命令返回的结果可能是一行也可能是多行.处理方式参见用法1。

好了,下面就给大家介绍神秘的ParsingKeywords的用法,简单的说这个东西就是FOR循环使用的处理每行内容的一些选项的集合,不提供的话,就使用默认的选项。ParsingKeywords包含好几个选项,使用时可以指明要使用的选项,选项之间用空格分开。几个主要的选项如下:
 选项  说明
 eol=c 指明行的结束符,一般情况下,不需要使用此选项,使用默认值即可
 skip=n 跳过文件开始的n行,再进行匹配
 delims=xxx 指明单词之间的分割符号,默认是空格和TAB
 tokens=x,y,m-n 每行按照分隔符分开以后,会编成若干个token,该选项指明要保存那些token到变量中给用户使用。等号后面指明这些token的编号,从1开始,指明的方式有多种,比如:
1,2,3
要1,2,和3这三个token
1-5
要1到5这5个token
1,2,4-6
要1,2,4,5,6这5个token

*
整个一行,都保存在FOR循环的变量中

那我们怎么获得这些token呢?看一下FOR循环的变量,就是%%后面的那个字符。由于FOR循环的变量的,只能使用一个字母作为变量(为什么?这是规定!),所以就是说变量的名字只能是26个字母的大小写,注意大写的%%A和小写的%%a是不同的。这些我们制定的token一次存放在变量的字母序往后的变量中。例如,我们指明了要三个token,变量为%%A,那么这三个token分别存放在%%A, %%B, %%C中。如果我们的变量定义为%%x,那么这三个token分别存放在%%x, %%y, %%z中。如果我们的变量定义为%%z,token存放在哪里呢?有兴趣自己试验,我没兴趣去搞这个了:(




usebackq
Specifies that you can use quotation marks to quote file names in filenameset, a back quoted string is executed as a command, and a single quoted string is a literal string command






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