Board logo

标题: [数值计算] [已解决]如何理解批处理中call解套嵌套变量? [打印本页]

作者: cryfordog    时间: 2009-11-1 23:59     标题: [已解决]如何理解批处理中call解套嵌套变量?

批处理:
@echo off
set n=1
set 1a=2
call echo %%%n%a%%
pause
解套错误

@echo off
set n=1
set a1=2
call echo %%a%n%%%
pause
解套正确


cmd:

set n=1
set 1a=2
call echo %%n%a%
解套正确

set n=1
set a1=2
call echo %a%n%%
解套正确
不太明白,用call 解套,有什么规律或者格式么

[ 本帖最后由 cryfordog 于 2009-11-3 22:14 编辑 ]
作者: cryfordog    时间: 2009-11-2 22:19

变量n=1:
代码1      1a      %%n%a%    解套错误
代码2      a1      %a%n%%    解套正确
????
作者: vsbat    时间: 2009-11-3 12:52

不知楼主是否学过 C++ ,C++里在讲变量时是这么说的--变量名可以是:字母,数字,下划线的组合
且 一定要以字母或下划线开头---
也就是说 不能以数字开头---
那么bat里是否是这样呢???
见如下测试代码:
  1. @echo off
  2. set a1=2
  3. set 1a=1
  4. set 227=3
  5. set _2a=4
  6. set _4=5
  7. set 5_e=6
  8. set a中$$国=555
  9. set a%8=666
  10. echo %a1%
  11. echo %1a%
  12. echo %227%
  13. echo %_2a%
  14. echo %_4%
  15. echo %5_e%
  16. echo %a中$$国%
  17. echo %a%8%
  18. pause>nul
复制代码
测试便知----bat里对变量名同样有类似要求:
不能以数字开头,可以有汉字或特殊字符eg. / \ . $,但不可以有如 & % 之类的在bat里有特殊意义的字符。
所以 本身 1a 就是不合法的-----当然出错

[ 本帖最后由 vsbat 于 2009-11-4 13:05 编辑 ]
作者: cryfordog    时间: 2009-11-3 22:10

哦,明白了,倒是没注意这点,谢谢了
作者: vsbat    时间: 2009-11-6 20:18

3楼 解答 不完整----
另见 贴
http://bbs.bathome.net/thread-6272-1-1.html




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