Board logo

标题: [已结]一个变量嵌套变量的问题 [打印本页]

作者: hongewuyan     时间: 2008-6-23 17:02    标题: [已结]一个变量嵌套变量的问题

请教一个问题,有一个功能一直不知道如何实现. 举例如下: 先设置下面两个变量: set a=1 set b1=10 然后执行 echo %b%a%% 得到 %b1% 其实我想得到的是 赋予b1的值,即 10 请问大家能否实现呢? [ Last edited by HAT on 2008-12-23 at 10:10 ]

作者: bat-zw     时间: 2008-6-23 17:15
@echo off
set a=1&set b1=10
call,echo %%b%a%%%
pause>nul

作者: hongewuyan     时间: 2008-6-23 17:33
果然可以实现 谢谢楼上的高手. 不过还是有些疑问 call,echo %%b%a%%% 这行可以解释下么? call, 做何解? 我直接 echo %%b%a%%% 就不可以,加上就可以了... call不是调用其他批处理或标签的么...而且后面那个逗号也不懂 - -

作者: lxmxn     时间: 2008-6-23 22:07
Originally posted by hongewuyan at 2008-6-23 17:33: 果然可以实现 谢谢楼上的高手. 不过还是有些疑问 call,echo %%b%a%%% 这行可以解释下么? call, 做何解? 我直接 echo %%b%a%%% 就不可以,加上就可以了. ...
call 这里实际是对命令行进行重新组织扩展,先扩展%%b%a%%%里面的%a%,使%a%变成a的值1,再用cal来扩展%b1%。 也可以用变量延迟来实现,方法如下:
@echo off

set /a a=1,b1=10

Setlocal EnableDelayedExpansion

echo:!b%a%! ...

pause
call 在这里的用法实际是变量延迟的一种快捷方式,变量延迟一般用在for的循环体里面。 call,%%b%a%%% 这里的逗号实际是一个分隔符,和空格一样,还有很多分隔符可用,比如上例中的 echo:!b%a%! ,当然并不是所有的命令都可以这样用,看情况而定……
C:\>echo+cn-dos.net cn-dos.net C:\>echo/cn-dos.net cn-dos.net C:\>echo[cn-dos.net cn-dos.net C:\>echo:cn-dos.net cn-dos.net C:\>echo;cn-dos.net cn-dos.net

作者: pusofalse     时间: 2008-6-23 22:17
我的理解是,如果变量之中仍有变量,就要用到变量延迟 call 延迟 或setlocal 开启延迟 不知这样理解对否。。。

作者: hongewuyan     时间: 2008-6-24 11:24
谢谢大家的帮助,这次真的明白了。。。

作者: mysuntjy     时间: 2008-12-23 07:13
Originally posted by bat-zw at 2008-6-23 17:15:
@echo off
set a=1&set b1=10
call,echo %%b%a%%%
pause>nul
为什么将连接两个set语句的&两边加个空格,即:set a=1 & set b1=10,运行结果为:ECHO 处于关闭状态. ????

作者: lxmxn     时间: 2008-12-23 09:48
Originally posted by mysuntjy at 2008-12-23 07:13: 为什么将连接两个set语句的&两边加个空格,即:set a=1 & set b1=10,运行结果为:ECHO 处于关闭状态. ????
加了空格,变量a的值就是1加上一个空格了,而不是原来单独的一个1。

作者: 95167958     时间: 2008-12-23 12:23
call,echo %%b%a%%%语句中为什么不是call,echo %b%a%%,而要多出两个%呢,请指教

作者: HAT     时间: 2008-12-23 13:14    标题: Re 9楼

关于逃逸字符%的讲解 www.cn-dos.net/forum ... 变量延迟详解 www.cn-dos.net/forum ... 什么情况下该使用变量延迟 www.cn-dos.net/forum ... 一个变量嵌套变量的问题 www.cn-dos.net/forum ...

作者: gool123456     时间: 2010-5-27 17:28
哈哈,恍然大悟。 好帖不能沉,顶上让多点人看到!