回复 15# CrLf
你举这个例子也从侧面印证了/f时对括号里面的判断,首字节为'时识别为命令,即使里面是一个“看起来是标准字符串”的字符串,带引号字符串与不带引号字符串具有同等效力,只要包含正确命令,都会被执行,区别只是第二句命令被双引号包起来,所以对其中的特殊符号进行了转义,=不再作为分割符。但是echo后的第一字节,[,;= ]等组合还是会被识别成切割符(这是构成命令的要素),不管在双引号内与否,因为这句的最外层是',里面有符合命令特征的,就先按语法解析了。
把几句放到一起看或许更能说明问题,出错在语法解析这一步上:预处理给出了一个可以显示的结果(兼具了命令与字符串二者的特征),但在语法解析时出了问题,既给出了可见回显,又提示文件错误……- prompt $
- echo on
- for /f "delims=" %%a in ('echo;=E5=AE=89=E8=A1=A3=E6=9F=9C=E9=97=A8=E5=B8=88=E5=82=85') do echo,%%a
- for /f "delims=" %%a in ('"echo+=E5=AE=89=E8=A1=A3=E6=9F=9C=E9=97=A8=E5=B8=88=E5=82=85"') do echo,%%a
- for /f "delims=" %%a in ("=E5=AE=89=E8=A1=A3=E6=9F=9C=E9=97=A8=E5=B8=88=E5=82=85") do echo,%%a
- for /f "delims=" %%a in (^"=E5=AE=89=E8=A1=A3=E6=9F=9C=E9=97=A8=E5=B8=88=E5=82=85^") do echo,%%a
-
- pause
复制代码
|