FOR /F 的用法

简介: 最近在研究批处理文件中FOR循环的用法时,发现对于FOR /F的用法,帮助文件以及在互联网上都没有什么文章讲的比较清楚,所以特别仔细钻研了一下,现将成果与各位分享,欢迎批评指正。 FOR /F 的用法主要有以下三种:for /F ["ParsingKeywords"] {%% | %}variab
最近在研究批处理文件中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包含好几个选项,使用时可以指明要使用的选项,选项之间用空格分开。几个主要的选项如下:
选项 说明
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
目录
相关文章
|
数据安全/隐私保护
runas的用法
今天同事的电脑安装了一个软件,运行时需要管理员权限,因为是在域环境中,无法提供管理员权限,这种情况可以用到runas。runas命令就是可以在A账户中用B账户运行某个软件。 runas /user:用户名 软件路径 在了解了runas用法后,我先在CMD中输入命令 需要输入账户密码 输入密码成功后就可以运行软件了,检查一下,是以这个用户运行的软件 后来想想运行这个命令每次都要输入管理员密码,这就没什么效果了。
2653 0
|
4月前
|
Kubernetes 网络协议 网络安全
nftables用法介绍
nftables用法介绍
96 2
|
容器
SimpleMessageListenerContainer用法
SimpleMessageListenerContainer用法
262 0
|
测试技术 API
harfbuzz 的用法
HarfBuzz 整形 API 的核心是函数。此函数采用一种字体,即 包含一串 Unicode 代码点的缓冲区和 (可选)字体功能列表作为其输入。它取代了 缓冲区中的代码点,其中包含来自 字体,正确排序和定位,以及任何 应用的可选字体功能。hb_shape()
465 0
$.each()的用法
$.each()的用法
241 0
|
JavaScript 前端开发 C#
PRId64的正确用法
#include #include #include // g++ -g -o x x.cpp -D__STDC_FORMAT_MACROS -std=c++11 int main() {         int64_t a = 32;         //pri...
1260 0