|
|
楼主 |
发表于 2011-5-17 00:06:49
|
显示全部楼层
本帖最后由 applba 于 2011-5-17 02:30 编辑
16# zm900612
我觉得把,还是要区分一下特殊字符的处理时机的,是读取时还是运行时,这两个时机处理的内容是有差别的。
读取时只处理(%,",^)这三个符号的,其他的什么命令分隔符(& && ||)、重定向符号等是不处理的。
比如在读取时,不管是否开启变量延迟,都是不会处理感叹号的,感叹号的处理是在运行时由具体的命令处理。
如果你没有开启变量延迟,set/a会把!解释成逻辑非,而其他命令把它识别为普通符号。
开启变量延迟后,所有的命令都会把它识别延迟符号,并启动解释工作。
比如 ,%(%%、%n,%%i ,%a%)的解释是发生在读取时的,这个是无条件解释的,此时命令还没有被执行的。(当然了如果call会导致重新识别%为特殊字符,运行时再次进行解释。)再如 &、&& ||等,读取时是不被解释的,他们是在运行时由具体的命令进行解释,因为cmd.exe在读取时是不知道命令是执行成功还是执行失败的。
空格等分隔符是专用的特殊符号,只能由一些命令在运行时进行解释,cmd.exe在读取时是不处理这些符号的。 |
|