最近在研究批处理文件中FOR循环的用法时,发现对于FOR /F的用法,帮助文件以及在互联网上都没有什么文章讲的比较清楚,所以特别仔细钻研了一下,现将成果与各位分享,欢迎批评指正。
FOR /F 的用法主要有以下三种:
for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) docommand [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ("LiteralString")do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ('command') docommand [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包含好几个选项,使用时可以指明要使用的选项,选项之间用空格分开。几个主要的选项如下:
转载自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=686647&id=1745831
FOR /F 的用法主要有以下三种:
for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) docommand [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ("LiteralString")do command [CommandLineOptions]
for /F ["ParsingKeywords"] {%% | %}variable in ('command') docommand [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 |
转载自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=686647&id=1745831