中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-27 07:44
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 请问for命令中tokens=*和delims=在用法上有什么不同? 查看 2,114 回复 14
楼 主 请问for命令中tokens=*和delims=在用法上有什么不同? 发表于 2007-02-09 09:19 ·  中国 江苏 连云港 联通
高级用户
★★★
前进者
积分 641
发帖 303
注册 2007-01-10 02:57
19年会员
UID 76009
性别 男
状态 离线
用for分析某个文本的内容,为了以防万一文本中用空格分开的行被断掉空格后面的字符串,我看到有的人用"tokens=*"有的人用"delims=" 还有的人两个都用,这两个用法上有什么区别吗?我个人的理解效果应该是一样的吧。
"tokens=*"表示取所有字段,"delims="是指不指定任何分割符,如果文本的第一行有空格断开,用其中一个都可以让分析的字符串不断开吧?是根据各人的爱好两个随便用,还是这两个在用法上有些小技巧?望知道的朋友相告,谢谢您在百忙之中的回帖!

[ Last edited by oilio on 2007-2-8 at 08:51 PM ]
我相信总有一天,总会遇到一个人可以相濡以沫、相吻以湿!
2 发表于 2007-02-09 21:39 ·  中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
自己试一下好了。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
3 发表于 2007-03-20 23:41 ·  中国 上海 电信
初级用户
积分 21
发帖 9
注册 2005-08-29 11:21
20年会员
UID 42047
状态 离线
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 ]
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
dosjj +2 2008-11-04 09:25
dosz +1 2009-03-07 09:34
4 发表于 2007-03-21 00:05 ·  中国 广东 广州 黄埔区 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
一行空格
5 发表于 2007-03-21 01:25 ·  中国 北京 联通
银牌会员
★★★
努力做坏人
积分 1,185
发帖 438
注册 2006-08-28 12:00
19年会员
UID 61449
来自 北京
状态 离线
可以简单的给你举了例子吧,例如有文本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

还是原文,呵呵,里面的具体参数和应用自己在摸索吧
本帖最近评分记录 (共 4 条) 点击查看详情
评分人分数时间
oilio +3 2007-03-21 02:15
logictianjin +2 2007-04-11 03:43
Climbing +10 2008-03-23 00:07
dosjj +2 2008-11-04 09:30
我今后在论坛的目标就是做个超级坏人!!!
6 发表于 2007-03-21 02:16 ·  中国 江苏 连云港 电信
高级用户
★★★
前进者
积分 641
发帖 303
注册 2007-01-10 02:57
19年会员
UID 76009
性别 男
状态 离线
谢谢楼上的兄弟,我好像领悟到了一点点精髓。
我相信总有一天,总会遇到一个人可以相濡以沫、相吻以湿!
7 发表于 2007-10-12 23:10 ·  中国 浙江 温州 电信
初级用户
★★
积分 158
发帖 89
注册 2007-04-25 08:06
19年会员
UID 86402
性别 男
状态 离线
先顶,慢慢去学
8 发表于 2007-10-13 10:39 ·  中国 江西 南昌 电信
中级用户
★★
积分 245
发帖 123
注册 2007-06-08 09:04
19年会员
UID 90636
性别 女
状态 离线
学习了
9 发表于 2008-03-03 23:51 ·  中国 重庆 电信
初级用户
积分 34
发帖 14
注册 2007-12-13 18:21
18年会员
UID 105563
性别 男
状态 离线
5楼不错。
10 发表于 2008-03-22 17:42 ·  中国 广东 广州 电信
中级用户
★★
积分 233
发帖 117
注册 2007-11-28 02:38
18年会员
UID 104005
性别 男
状态 离线
看了3楼的渐渐地明白了,,谢谢
11 发表于 2008-03-28 15:50 ·  中国 河北 保定 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
建议把楼上这个人的ID封掉同时删除其所有发帖。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
12 发表于 2009-03-07 10:44 ·  中国 上海 浦东新区 电信
中级用户
★★
一看二跟三动手
积分 396
发帖 188
注册 2005-10-23 13:21
20年会员
UID 43919
来自 上海
状态 离线
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 ]
附件
for命令中 tokens=2 和 delims=, 的用法.PNG
*/. . . * .
.\* . * dosz
*/ . ./\~~~~~~~~~~~~'\. ^|◆
\* ,/,..,\,...........,\.◆
^|^| ..▎# ▎田 田 ▎ ^| ▎◆
^|^| ^&^&▎ ▎ ▎'^|'▎ o
^|^| ##■■■■■■■■■■〓
13 发表于 2009-03-07 11:00 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
tokens=项为空时只取第一项,
delims=项为空时(默认)以空格及[Tab]为分隔,
精简
=> 个人网志
14 发表于 2009-04-17 23:57 ·  中国 上海 中移铁通
新手上路
积分 2
发帖 2
注册 2009-04-13 04:29
17年会员
UID 142809
性别 男
状态 离线
很好很强大,学习了
15 发表于 2009-04-24 10:57 ·  中国 上海 浦东新区 电信
新手上路
积分 3
发帖 3
注册 2009-04-21 09:28
17年会员
UID 143439
性别 男
状态 离线
一直对for感到陌生,现在有和他亲近了点!
THANK ALL!
论坛跳转: