Board logo

标题: 批处理以数字为开头的变量引用时不解的怪现象 [打印本页]

作者: vsbat    时间: 2009-11-5 21:22     标题: 批处理以数字为开头的变量引用时不解的怪现象

问题的核心是 当以数字为开头取变量,再显示变量时 发生如下不解情况:

set 1a=567
保存为bat运行
echo %1a%         结果错误显示为a
call echo %%1a%%  结果错误显示为a
setlocal enabledelayedexpansion
echo !1a!         结果正确

cmd下:
1.输入  set 1a=567&echo %1a%  回车      结果错误显示为%1a%
2.输入  set 1a=567  回车               
  输入  echo %1a%   回车                结果正确
3.输入  call,echo %%1a%%   回车         结果正确

由于 set 1a=567&echo %1a% 的错误 猜测是 变量延迟问题  但最终没想通其中缘由--------
也或许 是以数字开头变量 有bug---总之未懂其机理
请高手们过来研究研究-----……^_^


-----注:最初由 cryfordoq    提出

[ 本帖最后由 vsbat 于 2009-11-5 21:24 编辑 ]
作者: zqz0012005    时间: 2009-11-5 21:41

1、http://bbs.verybat.org/viewthrea ... mp;page=1#pid150103
3、变量替换的顺序:按照第一条的特点处理后,预处理时对%0、%*、%1~%9等批处理参数的替换优先于对变量的扩展。如果用纯数字或以数字打头的字符串作变量名,引用时尤其要注意这个问题(建议不要用纯数字或以数字打头的字符串作变量名。事实上,几乎所有语言都明确规定,标识符不能以数字打头。)


2、set 1a=567&echo %1a%,当然是变量延迟问题

3、cmd下的预处理与批处理中稍有不同,比如cmd中显然没有%1的概念〔在宏中用$1代替〕
作者: vsbat    时间: 2009-11-6 20:35

十分感谢 zqz 斑竹的 链接 -------探讨的很深入---
建议大家也去看一看-----




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