Board logo

标题: 请问for命令中tokens=*和delims=在用法上有什么不同? [打印本页]

作者: oilio     时间: 2007-2-9 09:19    标题: 请问for命令中tokens=*和delims=在用法上有什么不同?

用for分析某个文本的内容,为了以防万一文本中用空格分开的行被断掉空格后面的字符串,我看到有的人用"tokens=*"有的人用"delims=" 还有的人两个都用,这两个用法上有什么区别吗?我个人的理解效果应该是一样的吧。 "tokens=*"表示取所有字段,"delims="是指不指定任何分割符,如果文本的第一行有空格断开,用其中一个都可以让分析的字符串不断开吧?是根据各人的爱好两个随便用,还是这两个在用法上有些小技巧?望知道的朋友相告,谢谢您在百忙之中的回帖! [ Last edited by oilio on 2007-2-8 at 08:51 PM ]

作者: Climbing     时间: 2007-2-9 21:39
自己试一下好了。

作者: lelige     时间: 2007-3-20 23:41
delims是指分割符,tokens是指选取分割后得到的字符串片断。 以下面这段代码为例: FOR /F "eol=; tokens=2,3* delims=," %i in ("a,bc,def,ghij,jklmn") do @echo %i %j %k 其中Delims是“,”,所以"a,bc,def,ghij,klmn")被分隔成了a bc def ghij klmn这5段。 tokens=2,3* 表示取第2个片段、第3个片段以及第3个片段以后的所有片段,亦即: %i=bc %j=def %k=ghij,klmn(此处“*”表示从第4个片段开始就不用再分割了,统统赋给%k) 所以如果你代码中用“tokens=*”的话,就表示不进行任何分割,直接把当前行赋给循环变量。 [ Last edited by lelige on 2007-3-20 at 11:42 PM ]

作者: everest79     时间: 2007-3-21 00:05
一行空格

作者: 9527     时间: 2007-3-21 01:25
可以简单的给你举了例子吧,例如有文本a.txt 内容如下 hello world thank you very you are very good 这三行内容 for /f "tokens=*" %a in (a.txt) do @echo %a hello world thank you very you are very good 他可以变相的把每行前面的空格删除掉 for /f "delims=" %a in (a.txt) do @echo %a hello world thank you very you are very good 还是原文,呵呵,里面的具体参数和应用自己在摸索吧

作者: oilio     时间: 2007-3-21 02:16
谢谢楼上的兄弟,我好像领悟到了一点点精髓。

作者: kgdetg1127     时间: 2007-10-12 23:10
先顶,慢慢去学

作者: hxwxyz     时间: 2007-10-13 10:39
学习了

作者: h2thesun     时间: 2008-3-3 23:51
5楼不错。

作者: dslz666     时间: 2008-3-22 17:42
看了3楼的渐渐地明白了,,谢谢

作者: Climbing     时间: 2008-3-28 15:50
建议把楼上这个人的ID封掉同时删除其所有发帖。

作者: dosz     时间: 2009-3-7 10:44
Originally posted by Climbing at 2007-2-9 21:39: 自己试一下好了。
帮助别人提高自己于人于已都有利
@echo off
title for命令中 "tokens=2 和 delims=," 的用法
echo.
echo 床前明月光,疑是地上霜,举头望明月,低头思故乡
echo.
echo 如果我要用for将四句诗都显示到屏幕上,不需要任何参数即能实现:
echo for /f %%i in (静夜思.txt) do echo %%i
ECHO 1-1床前明月光,1-2疑是地上霜,1-3举头望明月,1-4低头思故乡。> 静夜思.txt
ECHO 2-1床前明月光,2-2疑是地上霜,2-3举头望明月,2-4低头思故乡。>>静夜思.txt
ECHO 3-1床前明月光,3-2疑是地上霜,3-3举头望明月,3-4低头思故乡。>>静夜思.txt
for /f %%i in (静夜思.txt) do echo %%i
pause>nul
echo.
ECHO 如果我只要“床前明月光”这句话,就需要delims帮忙了:
ECHO for /f "delims=," %%i in (静夜思.txt) do echo %%i 
for /f "delims=," %%i in (静夜思.txt) do echo %%i 
ECHO delims=后面跟了一个逗号,表示用原文中的逗号作为分隔符(划分的方法)将古诗分成四个小节。默认情况下,delims只显示分隔符前的第一小节,分隔符通常被忽略掉。
pause>nul
echo.
ECHO 显示其他小节的诗句要用到列提取命令“tokens”。
ECHO for /f "tokens=2 delims=," %%i in (静夜思.txt) do echo %%i 
for /f "tokens=2 delims=," %%i in (静夜思.txt) do echo %%i
ECHO tokens=2 表示对象(在这里是每行)的第2个字符集
pause>nul
[ Last edited by dosz on 2009-3-7 at 10:51 ]
附件 1: for命令中 tokens=2 和 delims=, 的用法.PNG (2009-3-7 10:44, 28.5 K,下载次数: 3)



作者: netbenton     时间: 2009-3-7 11:00
tokens=项为空时只取第一项, delims=项为空时(默认)以空格及[Tab]为分隔,

作者: prospy     时间: 2009-4-17 23:57
很好很强大,学习了

作者: welky     时间: 2009-4-24 10:57
一直对for感到陌生,现在有和他亲近了点! THANK ALL!