Board logo

标题: [文件操作] [已解决]批处理函数变量两次扩展? [打印本页]

作者: 秋风·飞扬    时间: 2012-5-10 21:42     标题: [已解决]批处理函数变量两次扩展?

本帖最后由 秋风·飞扬 于 2012-6-26 11:51 编辑
  1. @echo off & setlocal ENABLEEXTENSIONS
  2. set a=one
  3. set b=two
  4. echo/Before call  :swap a b [%a% %b%]
  5. call :Swap a b
  6. echo/After call 1 :swap a b [%a% %b%]
  7. call :Swap b a
  8. echo/After call 2 :swap b a [%a% %b%]
  9. goto :EOF
  10. :Swap
  11. setlocal
  12. ::================第14行=============
  13. call set a=%%%1%%
  14. ::================第15行=============
  15. call set b=%%%2%%
  16. 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%%后等于设置了一个不存在的变量。
  1. @echo off
  2. set a=one
  3. set b=two
  4. echo/Before call  :swap a b [%a% %b%]
  5. call :Swap a b
  6. echo/After call 1 :swap a b [%a% %b%]
  7. call :Swap b a
  8. echo/After call 2 :swap b a [%a% %b%]
  9. pause&goto :EOF
  10. :Swap
  11. set "%1=%b%"&set "%2=%a%"&goto :EOF  
复制代码

作者: 秋风·飞扬    时间: 2012-6-26 11:51

47天后的今天,[问题已解决]




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2