中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问for命令中tokens=*和delims=在用法上有什么不同?
作者:
标题: 请问for命令中tokens=*和delims=在用法上有什么不同? 上一主题 | 下一主题
oilio
高级用户

前进者


积分 641
发帖 303
注册 2007-1-10
状态 离线
『楼 主』:  请问for命令中tokens=*和delims=在用法上有什么不同?

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

[ Last edited by oilio on 2007-2-8 at 08:51 PM ]



我相信总有一天,总会遇到一个人可以相濡以沫、相吻以湿!
2007-2-9 09:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 2 楼』:  

自己试一下好了。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2007-2-9 21:39
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
lelige
初级用户





积分 21
发帖 9
注册 2005-8-29
状态 离线
『第 3 楼』:  

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 ]

   此帖被 +3 点积分       点击查看详情   
评分人:【 dosjj 分数: +2  时间:2008-11-4 09:25
评分人:【 dosz 分数: +1  时间:2009-3-7 09:34


2007-3-20 23:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 4 楼』:  

一行空格

2007-3-21 00:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
9527
银牌会员

努力做坏人


积分 1185
发帖 438
注册 2006-8-28
来自 北京
状态 离线
『第 5 楼』:  

可以简单的给你举了例子吧,例如有文本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

还是原文,呵呵,里面的具体参数和应用自己在摸索吧

   此帖被 +17 点积分       点击查看详情   
评分人:【 oilio 分数: +3  时间:2007-3-21 02:15
评分人:【 logictianjin 分数: +2  时间:2007-4-11 03:43
评分人:【 Climbing 分数: +10  时间:2008-3-23 00:07
评分人:【 dosjj 分数: +2  时间:2008-11-4 09:30




我今后在论坛的目标就是做个超级坏人!!!
2007-3-21 01:25
查看资料  发短消息 网志  OICQ (329429)  编辑帖子  回复  引用回复
oilio
高级用户

前进者


积分 641
发帖 303
注册 2007-1-10
状态 离线
『第 6 楼』:  

谢谢楼上的兄弟,我好像领悟到了一点点精髓。



我相信总有一天,总会遇到一个人可以相濡以沫、相吻以湿!
2007-3-21 02:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kgdetg1127
初级用户





积分 158
发帖 89
注册 2007-4-25
状态 离线
『第 7 楼』:  

先顶,慢慢去学

2007-10-12 23:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hxwxyz
中级用户




积分 245
发帖 123
注册 2007-6-8
状态 离线
『第 8 楼』:  

学习了

2007-10-13 10:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
h2thesun
初级用户





积分 34
发帖 14
注册 2007-12-13
状态 离线
『第 9 楼』:  

5楼不错。

2008-3-3 23:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dslz666
中级用户





积分 233
发帖 117
注册 2007-11-28
状态 离线
『第 10 楼』:  

看了3楼的渐渐地明白了,,谢谢

2008-3-22 17:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Climbing
铂金会员

网络独行侠


积分 6962
发帖 2753
注册 2003-4-16
来自 河北保定
状态 离线
『第 11 楼』:  

建议把楼上这个人的ID封掉同时删除其所有发帖。



偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
2008-3-28 15:50
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (653668)  编辑帖子  回复  引用回复
dosz
中级用户

一看二跟三动手


积分 396
发帖 188
注册 2005-10-23
来自 上海
状态 离线
『第 12 楼』:  



  Quote:
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)




*/. . . * .
.\* . [] * dosz
*/ . ./\~~~~~~~~~~~~'\. ^|◆
\* ,/,..,\,...........,\.◆
^|^| ..▎# ▎田 田 ▎ ^| ▎◆
^|^| ^&^&▎ ▎ ▎'^|'▎ o      
^|^| ##■■■■■■■■■■〓
2009-3-7 10:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 13 楼』:  

tokens=项为空时只取第一项,
delims=项为空时(默认)以空格及[Tab]为分隔,



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-3-7 11:00
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
prospy
新手上路





积分 2
发帖 2
注册 2009-4-13
状态 离线
『第 14 楼』:  

很好很强大,学习了

2009-4-17 23:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
welky
新手上路





积分 3
发帖 3
注册 2009-4-21
状态 离线
『第 15 楼』:  

一直对for感到陌生,现在有和他亲近了点!
THANK ALL!

2009-4-24 10:57
查看资料  发送邮件  发短消息 网志  OICQ (42205181)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: