找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 74603|回复: 21

[其他] [讨论]批处理for命令中tokens最多截取31位

[复制链接]
发表于 2011-10-7 17:47:19 | 显示全部楼层 |阅读模式
偶然发现的一个现象。

1.txt中合计48段,47个-
  1. 17-11-15-13-11-19-21-7-9-14-14-8-11-14-18-12-7-8-11-2-17-7-16-18-17-12-13-15-15-16-11-14-13-14-16-15-16-14-11-14-12-15-10-18
复制代码
  1. @echo off
  2. for /f "delims=- tokens=31" %%i in (1.txt) do echo %%i %%j
  3. pause
复制代码
显示11,%j
  1. @echo off
  2. for /f "delims=- tokens=32" %%i in (1.txt) do echo %%i %%j
  3. pause
复制代码
不显示。


经测试tokens最多截取,2的5次幂-1,即31段。
是不是因为32位的系统,所以就是32-1?64位系统可能就是,63段?
发表于 2011-10-7 17:50:03 | 显示全部楼层
如果一个FOR不够用就用2个或更多好了。tokens的个数虽然有限,但是可以嵌套

评分

参与人数 1PB +4 收起 理由
Hello123World + 4 好想法。

查看全部评分

发表于 2011-10-7 18:06:05 | 显示全部楼层
经测试,64x win7 下的 tokens 上限同样是 32
 楼主| 发表于 2011-10-7 18:16:54 | 显示全部楼层
回复 3# CrLf


    你用的是64位的系统
 楼主| 发表于 2011-10-7 18:17:38 | 显示全部楼层
本帖最后由 Hello123World 于 2011-10-7 18:26 编辑

论坛又禁止发表情了

发表于 2011-10-7 18:32:26 | 显示全部楼层
回复 4# Hello123World


    没,用别人的。
发表于 2011-10-7 19:09:31 | 显示全部楼层
这个我很早以前就已经发现了,当时我还在群里问:字母只有26个,可tokens却有31个,那剩下的要怎么来全付值呢
发表于 2011-10-7 19:34:13 | 显示全部楼层
本帖最后由 CrLf 于 2011-10-7 19:39 编辑

对了,寒夜Boss 说过 tokens 中无论是否使用* ,cmd 都会为其保留一个令牌,若开启则可以使用第 32 个令牌。若使用的令牌数(含*)超过 32 则相当于只设置了一个 *。
至于如何使用连续的32 个令牌,我做过测试,令牌的先后次序按照字符编码排序,也就是说非字母数字的字符也可用(实例见俺签名档),包括汉字。后来看发现了 plp626 的精华帖中早就注明了…
 楼主| 发表于 2011-10-7 19:51:43 | 显示全部楼层
回复 7# 601997526


    这个问题问的有水平,也有意思
 楼主| 发表于 2011-10-7 19:55:54 | 显示全部楼层
回复 8# CrLf


    字符编码排序 是指按照ascii码排序?
发表于 2011-10-7 19:57:21 | 显示全部楼层
你不是说要深挖吗?挖的还不够深,你得朝着两三年之前挖
http://bbs.bathome.net/thread-3704-1-1.html
http://bbs.bathome.net/thread-5548-1-1.html
 楼主| 发表于 2011-10-7 19:59:55 | 显示全部楼层
  1. @echo off
  2. For /f "tokens=1-2 delims=-" %%? in (1.txt) do echo %%? %%@
  3. pause
复制代码
还真是按照ascii码排序的,呵呵。
 楼主| 发表于 2011-10-7 20:03:23 | 显示全部楼层
回复 11# HAT


    恩,确实挖的还不够深,还得努力。
 楼主| 发表于 2011-10-7 20:03:38 | 显示全部楼层

奇怪啊,我怎么发不出表情?
发表于 2011-10-7 20:23:30 | 显示全部楼层
补上那个链接:
http://bbs.bathome.net/viewthrea ... hlight=for%2Bplp626
可以参考顶楼内容

以下为单字节字符的可用性测试文件:

::其中标注为出错的表明测试脚本在对其进行预处理时发生问题,而不代表此字符不用于令牌,而显示“不能成为首个参数变量”的表明该字符不可作为 [%%A] 出现,应为它们是 for 命令的默认分隔符或双引号,无法在 for 中被当成普通字符进行预处理操作,但我们可以把他们用作 [%%B] 或其他位于 [%%A] 之后的令牌名(可行,但不推荐)

也就是说,既可以使用汉字作为连续的 31 个令牌名,也可以使用单字节字符(比如 0x63~0x127 这个范围都是连续的可用令牌名)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 04:45 , Processed in 0.019501 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表