找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 37870|回复: 14

批处理中的变量嵌套变量用法

[复制链接]
发表于 2008-12-25 14:52:40 | 显示全部楼层 |阅读模式
请教一个问题,有一个功能一直不知道如何实现.
举例如下:
先设置下面两个变量:
set a=1
set b1=10
然后执行 echo %b%a%% 得到 %b1%
其实我想得到的是 赋予b1的值,即 10
请问大家能否实现呢?
  1. @echo off
  2. set a=1&set b1=10
  3. call,echo %%b%a%%%
  4. pause>nul
复制代码
call 这里实际是对命令行进行重新组织扩展,先扩展%%b%a%%%里面的%a%,使%a%变成a的值1,再用cal来扩展%b1%。

也可以用变量延迟来实现,方法如下:
  1. @echo off
  2. set /a a=1,b1=10
  3. Setlocal EnableDelayedExpansion
  4. echo:!b%a%! ...
  5. 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

原文地址:http://www.cn-dos.net/forum/viewthread.php?tid=41143
发表于 2009-1-8 09:24:08 | 显示全部楼层
回头看起更有一翻回味 ,这次好象看明白了   原来是这回事
起先不知道为甚摸  set 了 a   b1 却后来是echo %%b%a%%  根本没有b1的影子         原来是把a先次替换成了1 变成了echo %b1%
发表于 2009-1-18 22:11:12 | 显示全部楼层
学习了
变量嵌套变量,听起来好复杂哦
发表于 2009-2-4 15:15:52 | 显示全部楼层
明白了啊~~~谢谢分享啊 !!!!
发表于 2009-2-4 17:12:07 | 显示全部楼层
遇偶数直接脱%、遇奇数先替换再脱%。每个call脱一层。

[ 本帖最后由 taojunyi 于 2009-3-15 17:46 编辑 ]
发表于 2009-4-6 13:42:06 | 显示全部楼层
有点复杂,慢慢学吧!
发表于 2009-4-7 16:32:20 | 显示全部楼层
学习了,现在迷上批处理了,
发表于 2009-7-25 08:31:20 | 显示全部楼层
很不错的东西,学习了
发表于 2009-7-26 07:42:01 | 显示全部楼层
有点难理解,要认真学习才行!
发表于 2009-8-6 19:26:31 | 显示全部楼层
变量套变量,,我现在想有什么些用处,,好像,,,没想到
发表于 2009-8-8 04:11:24 | 显示全部楼层
看了数次,终于有点明白了!!
谢谢LZ了!
发表于 2010-4-13 18:35:11 | 显示全部楼层
好哇  从这里知道了怎样变量嵌套
发表于 2017-3-7 19:10:21 | 显示全部楼层
原来call echo是这么用的,两个百分号的形式%%实际上是为了扩展一次之后能留下一个百分号%。

Batcher好像这地方写错了吧? ”再用cal来扩展%b1%。“,应该是再用echo吧。

扩展即替换的意思,只是外文那么叫,expand replace...
发表于 2019-8-20 20:15:56 | 显示全部楼层
这个用法比较绕脑子
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:10 , Processed in 0.019345 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表