[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
昨天刚注册就看到了这个。有点感兴趣,无聊就试着分析了一下,得出了如下粗略的结论。有待验证。用这些结论试着分析了一下。
延迟变量中,从左到右依次执行
1.各种符号首先要配对,如果配对成功,则执行,执行之后不会再影响后面的符号,如果配对不成功,会产生副作用.
2.两个及两个以上!在一起视为一个!(当然必须先满足从左到右的原则)
3.双引号在遇到特殊符号!之前要求配对,否则影响!的作用。要求配对,如果不能配对,它会改变后面遇到的使用延迟变量的!的作用。
4.!要求配对,如果不能配对,也会改变后面遇到的特殊符号的作用。?
5.^会改变双引号配对的要求,如果它在双引号之前。因为它被转义了,所以双引号配对的要求被忽视。同样的,! 在前,双引号配对的要求
会被忽视。因此,谁优先,就先满足谁。
6.在括起的双引号中,一个^可以使!转义,但如果没有双引号括起,要两个^才能让!转义,一个不改变!的作用。但一个^会使双引号转义。
因此,一个^会让双引号的配对要求失效。
7.前面先有一个双引号,在双引号未配对之前,一个^就能使!转义。
8.^一旦出现,会取消前面的双引号的配对要求。
9.前无双引号,^要翻倍,才能起作用。4个^输出一个^.前有双引号,两个输出一个。
10.:会取消前面!配对的要求。如果!后的变量存在,则该变量及以后的:会保留,否则都会去掉。

六层之前都比较简单,无须多说。
第6层:%%a=!x!  r因此扩展为:echo !ss:~!x!!-!ss:~!!x!  按上面的结论,很简单。abcxss:~2
第7层:!ss:~!x!!-!-!ss:~!!x!       abcx-abc2
第8层:"!ss:~^!x!!"-!-^"!ss:~!^!x!  这一层比较复杂,因为引入了"和^  但有上面的结论就不难了。
"ss:~!x-"abc2
第9层:^^!s!扩展为!s.  同时后面的扩展为:!ss:~!s!-!-!ss:~!!s!  结论。abcs-abc!x!
第10层。我很想了一会,最后才明白,当()里为空时,根本不执行后面的echo命令。被忽悠了。

TOP

重新总结了下,获得新10条,这10条相对准确一些,只供参考。

延迟变量中,从左到右依次执行

1.各种符号首先要配对,如果配对成功,则执行,执行之后不会再影响后面的符号,如果配对不成功,会产生副作用.
2.两个及两个以上!在一起视为一个!(当然必须先满足从左到右的原则)
3.!会影响整行。该行有一个!和有多个!对行的影响效果一样。但对两个!之间的^无影响。
4.在没有!的情况下,"影响它后面的所有^,^将不再转义.直到"配对。但不影响它之前的。%只转义%.^只转义!和^.
5.在有!作用的情况下,"后的^^输出^.直到"配对。以后^^^^输出一个^.
6.在有!作用的前提下,两个!之间的^按正常执行,!之外的^起作用要翻倍。但如果有"的作用。"会把这种翻倍作用抵消。
7.在无!作用的情况下,^正常 起作用,起转义的作用。因此两个^^输出一个^。如果此时有"作用,则^不再转义。
8."和!正如正负号相互抵消一样起作用。但这仅限于!之外,而非!之间。
9.:会取消前面!配对的要求。如果!后的变量存在,则该变量及以后的:会保留,否则都会去掉。!后跟:,:会保留(在异常时的执行)
10.解释程序首先扫描%和^(这两个哪个先执行还不清楚),然后才扫描!

TOP

返回列表