Board logo

标题: for /f 不明白,不会用 [打印本页]

作者: 1980623     时间: 2006-10-15 23:01    标题: for /f 不明白,不会用
用for /?查了一下,但是对于for /f 不明白.skip=n delims=xxx tokens=x,y,m-nusebackq eol=c 这几个都不会用,谁能给讲一下???????

作者: electronixtar     时间: 2006-10-15 23:15
请楼主学会搜索和查看帮助文档

作者: 1980623     时间: 2006-10-16 00:58
我查了,但有点看不懂.

作者: milertom     时间: 2006-10-16 02:14
for /f是处理文件的
具体的方法,就是把(set)里面的文件打开,
把里面的内容,每行都按delims指定的分隔符,分割成一个一个字符串
依次传给你指定的变量,默认的分隔符是空格
eol=c 是不处理以c开头的行
skip=n 是忽略前面的n行
delims=xxx 指定分隔符
tokens=x,y,m-n指定变量
usebackq 如果文件名有空格,需要用"",并同时写上这个符号

比如一个文件ip.txt的内容是:
ip user psw

你用
for /f “tokens=1,2,3 delims=” %%i in (ip.txt) do ...
得到结果是 %%i是ip,%%j是user %%k是psw


我也是初学,说的不一定正确,你最好亲自试用一下才知道它的真正含义。

作者: vkill     时间: 2006-10-16 02:21
多看帮助,多看例子

作者: milertom     时间: 2006-10-16 02:22    标题: 共同进步!

@echo off
for /f "eol=@ skip=2 tokens=1,2,3 delims=, " %%i in (ip.txt) do echo %%i>>address.txt & echo %%j>>user.txt & echo %%k>>psw.txt
附件 1: ip.txt (2006-10-16 02:22, 105 bytes, 下载附件所需积分 1点 ,下载次数: 45)

作者: 1980623     时间: 2006-10-16 04:23
多谢各位帮忙,楼上的朋友我按你给的试了一下,运行后有一点不明白.

delims=, 是不是指以逗号为分隔符.但执行发现遇到空隔时也分隔了请问是怎么回事???不懂?????

谢谢

作者: lxmxn     时间: 2006-10-16 06:46
Originally posted by 1980623 at 2006-10-16 04:23:
多谢各位帮忙,楼上的朋友我按你给的试了一下,运行后有一点不明白.

delims=, 是不是指以逗号为分隔符.但执行发现遇到空隔时也分隔了请问是怎么回 ...


  请注意“delims=, ”后面还有一个空格。 :)

作者: weilong888     时间: 2006-10-16 07:45
这for命令可真要好好学学。

作者: pengfei     时间: 2006-10-16 08:38
Originally posted by milertom at 2006-10-16 02:22:

@echo off
for /f "eol=@ skip=2 tokens=1,2,3 delims=, " %%i in (ip.txt) do echo %%i>>address.txt & echo %%j>>user.txt & echo %%k>>psw.txt


"eol=@ skip=2 tokens=1,2,3 delims=, " 这里将,号和空格都作为分隔符, 只要出现这两个字符中的一个就会将前后的字符或字符串赋按顺序赋给不同的变量.

作者: jieok3375     时间: 2006-10-17 00:45
路过,学习了。

作者: 31676201     时间: 2006-12-4 11:51
DOS,代表着自由开放与发展,我们努力起來,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

作者: tao0610     时间: 2006-12-4 12:24
找点例子多试试效果就会用了!

作者: tathatayx     时间: 2006-12-10 10:23
正在学习,将坛子里面的重要具体应用文章打印出来了,慢慢提高!

“FO IN DO”命令好啊!!!!

作者: trickster     时间: 2006-12-30 06:57
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"了吧

Last edited by trickster on 2006-12-30 at 01:18 PM ]