标题: [文本处理] [已解决]批处理如何设置变量中的变量? [打印本页]
作者: 522235677 时间: 2013-4-14 19:35 标题: [已解决]批处理如何设置变量中的变量?
本帖最后由 522235677 于 2013-4-15 21:07 编辑
利用for的处理,得出c1的值是[000-1F1] 还有c2的值是[23F-GF3] 还有c3 c4 .....
相当于这样c1=[000-1F1]
echo !c1!
这个也能正常的显示[000-1F1]
下面是N行后的批处理
set choice=
set /p choice=选择类型:
echo !choice! 这个choice的值只会是数字,不会是别的,假如现在这个choice的值是1
set a=c!choice! 这个a的值现在应该是c1
echo !!a!! 问题就在这里了,不知道这里到底要怎么写,目的就是要这样显示出[000-1F1]
作者: tz_being 时间: 2013-4-14 20:07
把echo !!a!!改为echo !%a%!
作者: 522235677 时间: 2013-4-14 21:07
回复 2# tz_being
ECHO 处于关闭状态。
还是不行
作者: tz_being 时间: 2013-4-14 21:36
请测试如下代码:- @echo off && setlocal enabledelayedexpansion
- set "c1=[000-1F1]"
- set choice=1
- echo !choice!
- set a=c!choice!
- echo !%a%!
- pause>nul
复制代码
作者: 522235677 时间: 2013-4-15 16:05
本帖最后由 522235677 于 2013-4-18 19:56 编辑
作者: xxpinqz 时间: 2013-4-15 18:07
echo !%a%!
改为:
call echo %%!a!%%
作者: 522235677 时间: 2013-4-15 19:33
本帖最后由 522235677 于 2013-4-15 19:35 编辑
回复 6# xxpinqz
thanks,这个为什么要用call呢,可以解释解释吗
作者: wankoilz 时间: 2013-4-15 21:58
假设 a=b b=c
变量嵌套的实现都源于“多次扩展”,比如echo !%a%!,在echo 执行之前,先扩展出%a%的值b,再扩展出!b!的值c,再执行echo。
而call echo %%!a!%%原理是:在call echo执行之前%%!a!%%先被扩展为%!a!%,再扩展出!a!的值b,称为%b%,这个所谓“预处理”的过程结束之后就开始执行 call echo ,call会引起再次的“预处理”(原理我忘了)这样%b%被再次扩展,得到c。
作者: terse 时间: 2013-4-16 00:23
本帖最后由 terse 于 2013-4-16 14:35 编辑
这样处理效率稍提点- for %%e in (c!choice!) do echo !%%e!
复制代码
作者: 522235677 时间: 2013-4-16 14:17
回复 8# wankoilz
灰常感谢,恍然大悟啊
作者: xxpinqz 时间: 2013-4-16 18:48
回复 7# 522235677
具体原理我也讲不上来。依稀记得以前有人举过这么一个例子,大概是这么个意思(换衣服):给A穿上衣服称之为!a!,然后我要换一件衣服,要换先得脱,这时称为%!a!%,然后才穿上新衣服,称为%%!a!%%.这个意思能看懂吧?
这时变量已经是定义完成了,但在复合语句中要使用,就必须要经过某个语句或过程来再次扩展(为什么?这原理也不清楚),这样的语句如
call echo ,
或者9楼的for,
或者用管道符,如:echo |echo %%!a!%%,
或者call :mmm !a!
:mmm
set dd=%1
echo !%dd%!
goto :eof
具体经过验证的原理,你得去请教下论坛上的几位大佬了。我只知道用法,不知道原理~~~~~
作者: 522235677 时间: 2013-4-16 22:12
回复 11# xxpinqz
碉堡,感谢
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |