![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-12 18:31 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » For 命令中tokens参数的使用求教? |
| 可打印版本 4,954 / 29 |
| 第1楼 lgaint | 发表于 2006-10-25 04:16 |
| 初级用户 发帖 7 积分 22 | |
|
For 命令中tokens参数的使用求教? 因为要批量建文件夹,学习了一下FOR的使用,但任务完成了,FOR的学习却没法完成,被TOKEN绊了个跟头~~~
在命令行中打for /?出来的解释看不在懂,请问大家一下: eol=c - 指一个行注释字符的结尾(就一个) ________这个俺懂,指明什么是注释行,忽略过 skip=n - 指在文件开始时忽略的行数。 _________这个也明白 delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。___________这个似乎明白,在试验中,发现似乎是指从指定的字符处开始干活 tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的格式为一个范围。通过 nth 符号指定 m符号。如果字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后,分配并接受行的保留文本。 _____________这个就完全糊涂了,越试越糊涂,一团浆糊. tokens=x,y,m-n tokens的使用参数,我不明白x,y,m-n都是什么作用,哪位达人给解释一下? 如果您有时间,请向下接着看,如果没时间,就此指点两句也行,谢谢了先. 这个是我用来做试验的文本文件t1.txt的内容
以下是试验过程 E:\>for /f "eol=为 tokens=2 delims=a " %1 in (t1.txt) do @echo %1 |
|
| 第2楼 trickster | 发表于 2007-01-01 05:08 |
| 初级用户 发帖 33 积分 63 | |
|
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 |
|
| 第3楼 trickster | 发表于 2007-01-01 05:19 |
| 初级用户 发帖 33 积分 63 | |
|
这个是我用来做试验的文本文件t1.txt的内容
Quote: 为a工了挽住那转逝的感触, 我a不得不提起了笔, 写a下这禁忌之爱的点点滴滴。 或a许阴暗,或许残忍,或许另类, 但a谁也不能否认这其间人物最真的善良与无私。 愿a大家陪着他们走到那注定的终点。 for /f "eol=为 tokens=2 delims=a " %1 in (t1.txt) do @echo %1 注: 因eol=为,所以将忽略掉所有以"为"打头的行,由于"delims=a",又将每一行以"a"为分割成两部分,同时"tokens=2"即取第二部分. for /f "eol=为 tokens=1 delims=a " %1 in (t1.txt) do @echo %1 同上,只是最后你取的是以"a"分割的第一部分 for /f "eol=为 tokens=3 delims=a " %1 in (t1.txt) do @echo %1 同上,因t1.txt文件中每行只出现一个"a",所以实际你每行只分隔成两部分,而"tokens=3"去取第3部分,当然不会有显示. |
|
| 第4楼 rochan | 发表于 2007-01-04 04:09 |
| 初级用户 发帖 14 积分 40 | |
|
简单点可以这个来回答 楼主 的 字母 a 可以当作是 分隔符 (默认的分隔符 是 空格 或 跳格 )
而那个 tokens= 是指的 列数... 1 就是第一列 ; 2 就是第二列 ; 3 就是第三列... 这样就 好理解多了... |
|
| 第5楼 rochan | 发表于 2007-01-04 04:15 |
| 初级用户 发帖 14 积分 40 | |
楼主的文字可以用表格形象成 这们.. 第一列 第二列 第三列 ...... 为 工了挽住那转逝的感触, 我 不得不提起了笔, 写 下这禁忌之爱的点点滴滴。 或 许阴暗,或许残忍,或许另类, 但 谁也不能否认这其间人物最真的善良与无私。 几列都是 以 a 为分隔符 的 ...第三列 是 你写的那 行命令而加上的. 本来 第三列就没有..是空 的.. 看了 希望 你明白 .. 愿 大家陪着他们走到那注定的终点。 |
|
| 第6楼 Climbing | 发表于 2007-01-05 23:01 |
| 铂金会员 发帖 2,753 积分 6,962 来自 河北保定 | |
|
首先,你要明白,for /f的主要作用是从文本行中提取出特定的字符串。因此,它的每一个循环处理的就是一行文本。既然要从这行文本中提取出特定的字符串,当然,就需要对这一行文本进行分隔,分隔的结果就是将这一行文本分成了若干个字段,例如下面一行文本:
Dog*Cat*Monkey*Donkey 很显然,我们如果以*号作为分隔符,那么这一行就会分为下面四个字段: Dog Cat Monkey Donkey ok,现在我们要取出其中的一个或者所有字段进行处理,那么在for /f语句中,字段就是用tokens来代表的。 例如,我们这样写:for /f "tokens=1,2,3,4 delims=*" %i in ('...') do .... 那么以上面一行文本为例:tokens中的1就表示Dog、2表示Cat、依次类推。而在Do语句中,%i 代表tokens(1)的值,即Dog,而%j表示tokens(2)的值即Cat,再次依次类推。 如果我们写成:for /f "tokens=2,4 delims=*" %i in ('...') do ... 那么%i = tokens(2) 即Cat,%j=tokens(4)即Donkey。 另外,在tokens中可以使用*号,表示剩余的全部字段,例如:tokens=1,* 那么这里的*号表示tokens(2,3,4)的全部内容,也就是%j = Cat Monkey Donkey。 关于tokens大致就是这些东西了,以上的描述中可能有不准确的地方,以实践为准。 |
|
| 第7楼 bigcarp | 发表于 2007-01-15 05:00 |
| 初级用户 发帖 6 积分 21 | |
|
楼上精解!
|
|
| 第8楼 oilio | 发表于 2007-01-16 09:53 |
| 高级用户 发帖 303 积分 641 | |
|
嗯,看完了,又加深了一些印像,for是要好好学的。
|
|
| 第9楼 tyrbl | 发表于 2007-01-22 11:56 |
| 初级用户 发帖 9 积分 22 | |
|
6楼精解
|
|
| 第10楼 hangyug | 发表于 2007-01-22 22:42 |
| 初级用户 发帖 43 积分 99 | |
|
本来我也是不懂的,看完6楼的解释真是茅塞顿开啊,啥也不说了,回去接着学。。。
|
|
| 第11楼 kevinye | 发表于 2007-03-09 08:31 |
| 新手上路 发帖 4 积分 10 | |
|
不错,终于明白了
|
|
| 第12楼 nzisisco | 发表于 2007-03-10 16:34 |
| 初级用户 发帖 47 积分 107 | |
|
6楼讲的好 明白了很多``````信心又来了
|
|
| 第13楼 zhxy9804 | 发表于 2007-03-11 12:16 |
| 中级用户 发帖 97 积分 208 | |
|
给他加分啊 6楼 这样光说好有什么用 付出点实际行动来!
|
|
| 第14楼 hy433124shc | 发表于 2007-03-12 08:51 |
| 中级用户 发帖 75 积分 201 | |
|
6楼的通俗易懂!
说得明明白白.清清楚楚! 我给加2分! |
|
| 第15楼 tianlijian | 发表于 2007-03-13 11:58 |
| 初级用户 发帖 45 积分 120 | |
|
6楼说的好啊
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |