标题: [文件操作] [已解决]批处理函数变量两次扩展? [打印本页]
作者: 秋风·飞扬 时间: 2012-5-10 21:42 标题: [已解决]批处理函数变量两次扩展?
本帖最后由 秋风·飞扬 于 2012-6-26 11:51 编辑
- @echo off & setlocal ENABLEEXTENSIONS
- set a=one
- set b=two
- echo/Before call :swap a b [%a% %b%]
- call :Swap a b
- echo/After call 1 :swap a b [%a% %b%]
- call :Swap b a
- echo/After call 2 :swap b a [%a% %b%]
- goto :EOF
-
- :Swap
- setlocal
- ::================第14行=============
- call set a=%%%1%%
- ::================第15行=============
- call set b=%%%2%%
- endlocal & set "%1=%b%" & set "%2=%a%" & goto :EOF
复制代码
由于 call 命令的存在,第十四行被扩展两次,第二次扩展之后,该行相当于 set a=one,一旦这个命令被执行,变量 a 就会被覆盖掉。
第十五行同样被扩展两次,相当于 set b=one,换句话说,变量 a 和变量 b 现在都变成 one 了。
①问:为什么两次扩展之后,相当于set a=one 变量a被覆盖? 倘若我再加一对%% 是不是又变回来了? 这其中发生了哪些变化。
14行改成这个call set Swap.a=%%%1%%就行了
帮忙解释一下吧
作者: gawk 时间: 2012-5-10 22:19
为什么两次扩展之后,相当于set a=one 变量a被覆盖?
你女朋友明天早上起床之后先穿上一件红色内裤,后来觉得不吉利,于是换上一件黑色内裤。
请问她在教室里面考C++的时候穿的内裤是什么颜色。
作者: 秋风·飞扬 时间: 2012-5-11 10:32
回复 2# gawk
要是蕾丝的话,组合起来应该是暗红色...........你说她为什么要穿两条内裤,我不就是call了一下吗我,难道“批妹”还这样保守?,批妹她到底是个什么样的心态,在这个函数中,到底发生了什么不为人知的事情,求!深入!解答,两次扩展,是被call了两次?还是被%了两次?
作者: gawk 时间: 2012-5-11 11:54
回复 3# 秋风·飞扬
普通青年换内裤的时候都是先脱旧的,再穿新的,不会穿两条。
作者: apang 时间: 2012-5-11 12:24
可以不用call set,改成call set Swap.a=%%%1%%后等于设置了一个不存在的变量。- @echo off
- set a=one
- set b=two
- echo/Before call :swap a b [%a% %b%]
- call :Swap a b
- echo/After call 1 :swap a b [%a% %b%]
- call :Swap b a
- echo/After call 2 :swap b a [%a% %b%]
- pause&goto :EOF
-
- :Swap
- set "%1=%b%"&set "%2=%a%"&goto :EOF
复制代码
作者: 秋风·飞扬 时间: 2012-6-26 11:51
47天后的今天,[问题已解决]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |