[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理函数变量两次扩展?

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

评分人数

    • zqz0012005: 感谢给帖子标题标注[已解决]字样PB + 2

为什么两次扩展之后,相当于set a=one  变量a被覆盖?

你女朋友明天早上起床之后先穿上一件红色内裤,后来觉得不吉利,于是换上一件黑色内裤。
请问她在教室里面考C++的时候穿的内裤是什么颜色。

TOP

回复 2# gawk


    要是蕾丝的话,组合起来应该是暗红色...........你说她为什么要穿两条内裤,我不就是call了一下吗我,难道“批妹”还这样保守?,批妹她到底是个什么样的心态,在这个函数中,到底发生了什么不为人知的事情,求!深入!解答,两次扩展,是被call了两次?还是被%了两次?

TOP

回复 3# 秋风·飞扬


    普通青年换内裤的时候都是先脱旧的,再穿新的,不会穿两条。

TOP

可以不用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  
复制代码

TOP

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

TOP

返回列表