Board logo

标题: [文本处理] 批处理中echo %1111%出来的结果为何是111? [打印本页]

作者: irresolute    时间: 2009-3-7 17:25     标题: 批处理中echo %1111%出来的结果为何是111?

echo %1111%出来的结果为何是111?
作者: 523066680    时间: 2009-3-7 17:31

echo %1234%
恩 是第一个被省略了呢

一个空的变量可能会被分段解释吧
我猜: 被分成了%1 和234%  
echo %1
echo 234%
结果是 %1为空  234%为234

[ 本帖最后由 523066680 于 2009-3-7 17:33 编辑 ]
作者: zqz0012005    时间: 2009-3-7 17:53

早就说过变量名不要用数字打头,不然会被解释成批处理参数。

几乎所有语言都规定了标识符不能以数字打头。
作者: myzwd    时间: 2009-3-7 19:24     标题: 回复 2楼 的帖子

dos这么语言和其它的高级语言比较起来 是浪漫有余,
所以人们才有n多个问题提出来。该死的微软。
作者: Batcher    时间: 2009-3-7 19:57     标题: 回复 2楼 的帖子

一个空的变量可能会被分段解释吧
我猜: 被分成了%1 和234%

按照你的说法,%abcd%会被分解成%a和bcd%,但其实不是。
看来你的理论不够严谨哦:)
作者: defanive    时间: 2009-3-8 00:53

单讲变量名首字为数字的情况下,2L的猜测是正确的。。。

不过,CMD中直接输入set 111=2,然后echo %111%是能正确输出2的,但在批中不行,猜测原因与预处理有关。CMD中直接执行跳过预处理,而批需要一次预处理。。。
作者: defanive    时间: 2009-3-8 00:55

实验证明,变量可以用数字打头。。。

批处理中set 111=2之后,set命令的列表中第一项有111=2,因此只是预处理的问题。。。

@echo off
setlocal enabledelayedexpansion
set 111=2
echo !111!
pause

以上代码测试成功。。。
作者: Batcher    时间: 2009-3-8 00:59     标题: 回复 6楼 的帖子

无需猜测,确实如此^_^
http://bbs.bathome.net/viewthread.php?tid=3610#pid22728
作者: Batcher    时间: 2009-3-8 01:02     标题: 回复 7楼 的帖子

Good work!
其实好几个人在好几个地方都提到过这个方法:)
作者: zqz0012005    时间: 2009-3-8 11:50     标题: 回复 7楼 的帖子

早就说过。。。

唉,老帖都没人看。。。

我看技术组是不是有必要定期总结和顶起一些经典老帖。
作者: 523066680    时间: 2009-3-8 12:54

re 2楼
我的知识不多~    恩  %1 会被解释成参数  
       原因1:  变量1234还没被定义,所以进一步分析~
       原因2:  参数范围从0~9  所一只把%1 当作了参数 而不是%12 或者....
                   所以“变量”名的第一个被省略了。假如不是1-9的数字 如%a12%不会被拆分
                  结果显示“ECHO 处于关闭状态。”

[ 本帖最后由 523066680 于 2009-3-8 12:57 编辑 ]
作者: zqz0012005    时间: 2009-3-8 13:22

不管变量1234有没有定义,对于的%1234%处理总是先替换%1
http://bbs.verybat.org/viewthread.php?tid=13431&page=1&fromuid=37#pid152378
数字可以作变量名,但预处理时对%0、%1~%9、%*等参数的替换优先于对变量的扩展
试试
  1. @echo off
  2. echo %0%
  3. set 0=hello
  4. echo %0%
  5. setlocal EnableDelayedExpansion
  6. echo !0!
  7. echo.&pause
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2