![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-02 10:23 |
共 48,037 主题排行 / 350,122 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 关于变量引用的问题 |
| 可打印版本 1,774 / 13 |
| 第1楼 #four# | 发表于 2006-11-21 04:36 |
| 中级用户 发帖 34 积分 209 | |
|
关于变量引用的问题 我在学习set命令的时候,用了下面这段批处理想测试一下变量引用的问题,可是结果却不能下确显示,求高手能帮我解答。
批处理是如下 @echo off set num=iamyxj set a=0 set /a a+=1 echo %num:~%a%,1% echo %num:~1,1% pause 我想通过对变量a的引用来显示变量num的任意一个字符,发现不能解析变量%a%,就连我把变量直接设成1也不能正确显示,而下面那句却能正常显示第一个字符。 百思不得其解.望高手解答. |
|
| 第2楼 namejm | 发表于 2006-11-21 04:47 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
| 第3楼 #four# | 发表于 2006-11-21 05:00 |
| 中级用户 发帖 34 积分 209 | |
|
我看了关于变量延迟的文章,willsort兄是这样说的。
命令解释器是扩展环境变量的行为大致如下:首先读取命令行的一条完整语句,在进行一些先期的预处理之后,命令被解释执行之前,会对其中用百分号闭合的字符串进行匹配,如果在环境空间中找到了与字符串相匹配的环境变量,则用其值替换掉原字符串及百分号本身,如果未得到匹配,则用一个空串替换,这个过程就是环境变量的“扩展”,它仍然属于命令行的预处理范畴。 而我上面的那个批处理不是一条语句啊,我先对变量nul和a进行了设置,再读到下一句的时候应该能从环境空间中找到这个变量吗。为什么也要用上!号来延迟引用这个变量呢。 版主能不能对我们这样的新手再举几个例子说一说呢。 |
|
| 第4楼 ccwan | 发表于 2006-11-21 05:04 |
| 金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊 | |
![]() |
|
| 第5楼 tao0610 | 发表于 2006-11-21 05:14 |
| 高级用户 发帖 218 积分 579 | |
会对其中用百分号闭合的字符串进行匹配 这句会把前两个%%中间的做匹配,也就是%num:~%被先匹配! |
|
| 第6楼 不得不爱 | 发表于 2006-11-21 05:18 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
因为你使用了变量套变量,所以必须使用!,而使用!就必须起用延迟变量。
|
|
| 第7楼 9527 | 发表于 2006-11-21 05:21 |
| 银牌会员 发帖 438 积分 1,185 来自 北京 | |
|
其实除了二楼NAMEJM兄的方法,也可以使用内部命令CALL
@echo off set num=iamyxj set a=0 set /a a+=1 call echo %%num:~%a%,1%% 这样的形式就可以啦 echo %num:~1,1% pause |
|
| 第8楼 不得不爱 | 发表于 2006-11-21 05:53 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
楼上的是一样无法使用
|
|
| 第9楼 9527 | 发表于 2006-11-21 06:20 |
| 银牌会员 发帖 438 积分 1,185 来自 北京 | |
|
我想楼上的还是先问问其他人的测试结果在说吧
|
|
| 第10楼 lxmxn | 发表于 2006-11-21 14:25 |
| 版主 发帖 4,938 积分 11,386 | |
|
经测试,9527 兄在7楼的代码是正确的,得到了正确的结果。 call用的妙~学习了~ |
|
| 第11楼 tao0610 | 发表于 2006-11-21 14:58 |
| 高级用户 发帖 218 积分 579 | |
|
两者都用上的能套用2次变量。 |
|
| 第12楼 amao | 发表于 2006-11-21 19:13 |
| 中级用户 发帖 152 积分 316 | |
|
刚刚开始学CMD下的批处理,收下来备用。
|
|
| 第13楼 redtek | 发表于 2006-11-21 22:42 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
多个变量相互嵌套测试,版本:晕晕版~:) 多个变量相互嵌套测试实验,版本:晕晕版~:)
测试输出的值的结果如下: 以上实验变量嵌套需要 4 次“动作”才能完全“转化”并显示实际希望值:) 简单的说明原理: 从变量num中取的字符值,由另一个变量b决定,而变量b中某个字符值的取向再由变量a来决定。 规律: %%两个百分号用于输出的话,就代表一个%号, 如果想输出%%两个百分号,就要用4个百分号。 利用上面原理,使用%百分号的不同的数量来决定变量嵌套的级数, 级数越多,百分号的双倍使用数量也随着递增,使用这个原理可以完成极复杂的嵌套。 缺点:越复杂的嵌套几乎越是无法清晰读懂,同时越难维护代码。 所以,使用延时变量另一个好处在于可以让代码非常清晰:) [ Last edited by redtek on 2006-11-21 at 09:53 AM ] |
|
| 第14楼 不得不爱 | 发表于 2006-11-21 23:03 |
| 超级版主 发帖 2,044 积分 5,310 来自 四川南充 | |
|
经测试,9527 兄在7楼的代码是正确的,得到了正确的结果。
加5分 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |