[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 15# CrLf


    你举这个例子也从侧面印证了/f时对括号里面的判断,首字节为'时识别为命令,即使里面是一个“看起来是标准字符串”的字符串,带引号字符串与不带引号字符串具有同等效力,只要包含正确命令,都会被执行,区别只是第二句命令被双引号包起来,所以对其中的特殊符号进行了转义,=不再作为分割符。但是echo后的第一字节,[,;= ]等组合还是会被识别成切割符(这是构成命令的要素),不管在双引号内与否,因为这句的最外层是',里面有符合命令特征的,就先按语法解析了。

把几句放到一起看或许更能说明问题,出错在语法解析这一步上:预处理给出了一个可以显示的结果(兼具了命令与字符串二者的特征),但在语法解析时出了问题,既给出了可见回显,又提示文件错误……
  1. prompt $
  2. echo on
  3. 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
  4. 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
  5. 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
  6. 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
  7. pause
复制代码

TOP

擦喇!灵异事件。
第三个FOR存在时,第四个FOR不报错;第三个FOR用REM注释起来时,第四个FOR就会报找不到文件错误。
彻底凌乱了……

TOP

  1. mshta http://bathome.net/s/hta "type('list.txt').replace(/[^:\r\n]+(?=([\r\n]|$))/g, function($0){return decodeURIComponent($0.replace(/=/g,'%%'))})"
  2. pause
复制代码

TOP

返回列表