批处理脚本解释器cmd.exe对复合语块(如for.../if.../(...)/...&...等)是先完成预处理再予执行,预处理过程要扫描语块中每个字段,其中遇到%var%类型变量则完成预先赋值,对未被双引号包裹的字段则要处理其中的^转义符,即完成其后字符(通常是cmd语义字符)的转义... 示例如下:- for /f "delims=" %%a in (' "dir /b/a-d | findstr .txt" ') do echo,%%a
复制代码
预处理扫描以上复合语块时,遭遇被双引号包裹的参数字符串,则只对其中可能包含的%var%类型变量赋值,而不作^转义处理,故双引号内无须用^转义符- for /f delims^= %%a in (' dir /b/a-d ^| findstr .txt ') do echo,%%a
复制代码
预处理扫描以上复合语块时,遭遇未被双引号包裹的参数字符串,不仅对其中可能包含的%var%类型变量赋值,还要作^转义处理,转义后 ^= 变为 =,而 ^| 变为 | 。
以上预处理过程可开启 echo on 之后查看和验证代码运行状态信息...
反言之,也可用以下会被报错的两行代码来验证上述预处理规则:- for /f "delims^=" %%a in (' "dir /b/a-d ^| findstr .txt" ') do echo,%%a
复制代码
- for /f delims= %%a in (' dir /b/a-d | findstr .txt ') do echo,%%a
复制代码