[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set var=hero
  4. echo !var!^^^^^>
  5. pause
  6. 运行的结果为:“hero^>”。我们来分析一下,进行第一次预处理时,由于“!var!”,因此先不替换变量值而进行特殊符号的处理,处理完后就成了“echo !var!^^>”;之后再进行一次预处理,此时就要替换“!var!”了,处理完后就成了“echo hero^>”。
复制代码
这个解释跟前面的观点矛盾了吧:
  1. 根据我的经验,预处理要做的是变量值的替换和特殊符号的处理。究竟先执行哪个操作呢,我认为要先进行变量值的替换。
复制代码
是不是说的有点乱哦?
按照作者前面的观点,我也可以理解成:第一次预处理时结果是:echo hero^^>,第二次与处理时结果是:echo hero^>,最后的结果就是:echo hero^>,不是照样说得通吗?

如果作者的前面观点是正确的话,我想可以这样总结(个人):
  1. 预处理:每条语句执行前都会进行从变量替换(如果有的话)到转义特殊符号(如果有的话)的动作过程。
  2. 有下面2种情况:
  3. (1)没有开启setlocal enabledelayedexpansion:只进行一次预处理,且用双引号包裹的内容原封不动。
  4. (2)有开启setlocal enabledelayedexpansion:①语句中含有!:进行两次预处理,且不管是否用双引号包裹。②语句中不含!:与情况(1)相同。
复制代码

TOP

10# applba


感觉这都只是猜测证实的过程。。谁也说不准。。M$DOS就像黑盒子。。功力深浅全凭时间和经验。。让我这样的新人学起来相当吃力。。

TOP

嗯。。你比我强多了。。向你学习!

TOP

返回列表