| @echo off | | | | setlocal enabledelayedexpansion | | | | set var=hero | | | | echo !var!^^^^^> | | | | pause | | 运行的结果为:“hero^>”。我们来分析一下,进行第一次预处理时,由于“!var!”,因此先不替换变量值而进行特殊符号的处理,处理完后就成了“echo !var!^^>”;之后再进行一次预处理,此时就要替换“!var!”了,处理完后就成了“echo hero^>”。COPY |
这个解释跟前面的观点矛盾了吧:根据我的经验,预处理要做的是变量值的替换和特殊符号的处理。究竟先执行哪个操作呢,我认为要先进行变量值的替换。COPY 是不是说的有点乱哦?
按照作者前面的观点,我也可以理解成:第一次预处理时结果是:echo hero^^>,第二次与处理时结果是:echo hero^>,最后的结果就是:echo hero^>,不是照样说得通吗?
如果作者的前面观点是正确的话,我想可以这样总结(个人): | 预处理:每条语句执行前都会进行从变量替换(如果有的话)到转义特殊符号(如果有的话)的动作过程。 | | 有下面2种情况: | | (1)没有开启setlocal enabledelayedexpansion:只进行一次预处理,且用双引号包裹的内容原封不动。 | | (2)有开启setlocal enabledelayedexpansion:①语句中含有!:进行两次预处理,且不管是否用双引号包裹。②语句中不含!:与情况(1)相同。COPY |
|