中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-02 22:48
48,038 主题排行 / 350,123 发帖 / 今日 1 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 谁能给我具体的讲讲 for /f 这个命令吗?
可打印版本  1,204 / 7
第1楼 online365 发表于 2006-10-24 04:15
初级用户 发帖 75 积分 182
谁能给我具体的讲讲 for /f 这个命令吗?
谁能给我具体的讲讲 for /f 这个命令吗?
这个命令好难哦。。
谢谢各位高手了。。小弟决定以后就在DOS联盟学习了
第2楼 lxmxn 发表于 2006-10-24 04:24
版主 发帖 4,938 积分 11,386

  请充分利用论坛的搜索功能。

  帖一个for命令的教程:最强之dos命令 – for
第3楼 online365 发表于 2006-10-24 13:51
初级用户 发帖 75 积分 182
谢谢,但是你的这个我看过了,还是有很多地方不懂
第4楼 不得不爱 发表于 2006-10-24 23:51
超级版主 发帖 2,044 积分 5,310 来自 四川南充
多用才能熟能生巧
第5楼 holyman 发表于 2006-10-25 00:04
初级用户 发帖 20 积分 42
可以把想要应用for的需求贴上来,通过高手们的解答来学会应用
第6楼 lxmxn 发表于 2006-10-25 00:18
版主 发帖 4,938 积分 11,386

  恩,同意F4和F5的看法,只有多多练习才能熟练的运用for来解决问题。或者可以把你不懂的for语句帖上来,大家一起帮你解释也可以啊。这样的学习效果应该是不错的。
第7楼 online365 发表于 2006-10-25 01:54
初级用户 发帖 75 积分 182
我就是FOR /f 这个不会啊, 好复杂啊。。
主是要这个选项~ tokens=x,y,m-n 把我头都搞大了。。
第8楼 trickster 发表于 2007-01-01 05:21
初级用户 发帖 33 积分 63
for命令应该是DOS命令中比较难理解的一个,如果不能灵活的应用for语句,你就做不出一个好的批处理。由于本人也是刚刚开始学习dos系统,可能很多理解的都比较肤浅,但本着自由~共享的精神,把自己在最近学习for命令的一些心得拿出来跟LZ共同进行探讨,如有不当之处也请其它朋友给予指正,同时也希望LZ能从中到一些启示:

eol=c - 指一个行注释字符的结尾(就一个)

比如:eol=; for/f 命令在处理时会忽略掉以“;”打头的行,又如: eol=@ for命令在处理后面的操作是将会忽略掉以@大头的行,这个类似与批处理中在遇到以::打头的行时批处理对本行不做处理一样.

skip=n - 指在文件开始时忽略的行数。

比如你设定 skip=5 则for命令从你给定的文件中的第6行(跳过5行)开始处理.这个比较容易理解,不在过多解释.

delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。

delims的作用就是指定分隔符,比如在XP环境下用date /t命令显示当前的日期会得到:"2006-12-29 星期五"而当使用下面的命令后看一下有什么变化:

for /f "delims=- " %a in('date /t') do echo %a

得到的是"2006",为什么会这样呢,就是因为你使用delims指定l了"-"和" "(空格,)作为分隔符,for 命令在处理时取出分隔符两边的符号,至于为什么最后的结果是2006,将在说完tokens后给出

tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
当tokens后指定了多个符号时,后面的变量也会进行扩充,比如将上面的例子改变一下:

for /f "tokens=1-4 delims=- " %a in ('date /t') do echo %a:%b:%c:%d

运行后我们得到"2006:12:29:星期五".其中,这个 for 程序体的语句引用 %a 来取得第一个符号(2006),引用 %b 来取得第二个符号(12),引用 %c来取得第三个符号(29),引用%d来取得第四个符号(星期五), 因为你用"tokens"指定了"date /t"命令输出的结果中的第一到第四个符号,所以这时引出了%b;%c;%d,当然后面的变量也不是随便给出的,它必须跟第一次给出的变量名是相邻的,但后面(do后面执行的命令)他们之间的顺序可以颠倒,只是会影响到最终的输出结果
如果在for /f中没有指定"tokens",默认 tokens=1 ,现在你应该明白为什么在第一个例子中得到的结果是"2006"了吧
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023