本帖最后由 秋风·飞扬 于 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%%就行了
帮忙解释一下吧 |