- 帖子
- 43
- 积分
- 84
- 技术
- 9
- 捐助
- 0
- 注册时间
- 2016-10-16
|
回复 3# sincos2007
我是这样理解的:
此行代码为:echo %str1%
执行前,先进行一次预处理,变为:echo abc %%var1%% !!var2!! mmm !var3!
执行时不会再扩充%,故前面是一样的。第一个感叹号配对无效没了,第二、三两个感叹号之间的扩充因为var2未定义一起消失了,第四、五两个感叹号同理带着中间一串一起消失,最后一个感叹号也没得配对消失了,只剩下没被扩充的var3
因此最终回显结果是:abc %%var1%% var3
而且中间的空格是来自var1与var2之间的,和var3前面的那一段空格没有任何关系。你可以把var3前面的空格拉长再比较一下结果,就更好理解了。
关键在于对!扩充的理解。找准第一对能扩充的!,而不是第一对好像配对了的!。
如以下代码:setlocal enabledelayedexpansion&set a=123&echo !!a!&pause
最终显示结果会是123。事实上,a前后的感叹号再多都不会有影响。
而如果执行代码:setlocal enabledelayedexpansion&set a=123&echo ! !a!&pause
最终显示结果会是a。因为第一对!!中间有东西,于是扩充掉了,a就不能扩充了。 |
|