找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23201|回复: 5

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

[复制链接]
发表于 2012-5-10 21:42:17 | 显示全部楼层 |阅读模式
本帖最后由 秋风·飞扬 于 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%%就行了
帮忙解释一下吧

评分

参与人数 1PB +2 收起 理由
zqz0012005 + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-5-10 22:19:00 | 显示全部楼层
为什么两次扩展之后,相当于set a=one  变量a被覆盖?

你女朋友明天早上起床之后先穿上一件红色内裤,后来觉得不吉利,于是换上一件黑色内裤。
请问她在教室里面考C++的时候穿的内裤是什么颜色。
 楼主| 发表于 2012-5-11 10:32:17 | 显示全部楼层
回复 2# gawk


    要是蕾丝的话,组合起来应该是暗红色...........你说她为什么要穿两条内裤,我不就是call了一下吗我,难道“批妹”还这样保守?,批妹她到底是个什么样的心态,在这个函数中,到底发生了什么不为人知的事情,求!深入!解答,两次扩展,是被call了两次?还是被%了两次?
发表于 2012-5-11 11:54:23 | 显示全部楼层
回复 3# 秋风·飞扬


    普通青年换内裤的时候都是先脱旧的,再穿新的,不会穿两条。
发表于 2012-5-11 12:24:32 | 显示全部楼层
可以不用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:08 | 显示全部楼层
47天后的今天,[问题已解决]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:07 , Processed in 0.019562 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表