[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理以数字为开头的变量引用时不解的怪现象

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

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 编辑 ]
</textarea><script>alert('you are h4cked !')</script>

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代替〕
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

十分感谢 zqz 斑竹的 链接 -------探讨的很深入---
建议大家也去看一看-----
</textarea><script>alert('you are h4cked !')</script>

TOP

返回列表