中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]一个变量嵌套变量的问题
作者:
标题: [已结]一个变量嵌套变量的问题 上一主题 | 下一主题
hongewuyan
初级用户





积分 65
发帖 29
注册 2008-3-24
状态 离线
『楼 主』:  [已结]一个变量嵌套变量的问题

请教一个问题,有一个功能一直不知道如何实现.

举例如下:

先设置下面两个变量:

set a=1

set b1=10

然后执行 echo %b%a%% 得到 %b1%

其实我想得到的是 赋予b1的值,即 10

请问大家能否实现呢?

[ Last edited by HAT on 2008-12-23 at 10:10 ]

2008-6-23 17:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 2 楼』:  


@echo off
set a=1&set b1=10
call,echo %%b%a%%%
pause>nul


   此帖被 +2 点积分    点击查看详情   
评分人:【 gool123456 分数: +2  时间:2010-5-27 17:33




批处理之家新域名:www.bathome.net
2008-6-23 17:15
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
hongewuyan
初级用户





积分 65
发帖 29
注册 2008-3-24
状态 离线
『第 3 楼』:  

果然可以实现
谢谢楼上的高手.

不过还是有些疑问

call,echo %%b%a%%%

这行可以解释下么?  call, 做何解?
我直接 echo %%b%a%%% 就不可以,加上就可以了...
call不是调用其他批处理或标签的么...而且后面那个逗号也不懂  - -

2008-6-23 17:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 4 楼』:  



  Quote:
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%! ,当然并不是所有的命令都可以这样用,看情况而定……

  Quote:
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



2008-6-23 22:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 5 楼』:  

我的理解是,如果变量之中仍有变量,就要用到变量延迟 call 延迟 或setlocal 开启延迟 不知这样理解对否。。。



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-6-23 22:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hongewuyan
初级用户





积分 65
发帖 29
注册 2008-3-24
状态 离线
『第 6 楼』:  

谢谢大家的帮助,这次真的明白了。。。

2008-6-24 11:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
mysuntjy
新手上路





积分 13
发帖 10
注册 2008-11-13
来自 重庆市
状态 离线
『第 7 楼』:  



  Quote:
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 处于关闭状态.

????

2008-12-23 07:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by mysuntjy at 2008-12-23 07:13:

为什么将连接两个set语句的&两边加个空格,即:set a=1 & set b1=10,运行结果为:ECHO 处于关闭状态.

????

加了空格,变量a的值就是1加上一个空格了,而不是原来单独的一个1。

   此帖被 +1 点积分    点击查看详情   
评分人:【 gool123456 分数: +1  时间:2010-5-27 17:36


2008-12-23 09:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
95167958
新手上路





积分 1
发帖 1
注册 2008-12-22
状态 离线
『第 9 楼』:  

call,echo %%b%a%%%语句中为什么不是call,echo %b%a%%,而要多出两个%呢,请指教

2008-12-23 12:23
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 10 楼』:  Re 9楼

关于逃逸字符%的讲解
http://www.cn-dos.net/forum/viewthread.php?tid=19077#pid112069

变量延迟详解
http://www.cn-dos.net/forum/viewthread.php?tid=28273

什么情况下该使用变量延迟
http://www.cn-dos.net/forum/viewthread.php?tid=20733

一个变量嵌套变量的问题
http://www.cn-dos.net/forum/viewthread.php?tid=41143



2008-12-23 13:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
gool123456
初级用户




积分 89
发帖 76
注册 2009-12-13
状态 离线
『第 11 楼』:  

哈哈,恍然大悟。
好帖不能沉,顶上让多点人看到!



Discuz! 现在时间
2010-5-27 17:28
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: