这是一个例子:
@echo off
for /f %%# in ('rem %') do echo %%#
echo never displayed
Run Code Online (Sandbox Code Playgroud)
(并且输出与此示例略有不同 - 生成一个空行少 - 尽管脚本应该执行相同的操作)
@echo off
for /f %%# in ('rem %') do echo %%#
echo never displayed
Run Code Online (Sandbox Code Playgroud)
如果DO块中没有令牌,则没有问题:
@echo off
for /f %%# in ('rem %') do dir
echo will be displayed
Run Code Online (Sandbox Code Playgroud)
看起来脚本尝试在遇到时扩展一些变量,%
但是它被闭括号中断?
尝试解释该行时,它是一个解析器错误
for /f %%# in ('rem %') do echo %%#
^...........^
undefined variable
for /f %%# in ('rem %') do dir
^
without a closing percent sign, it is discarded
Run Code Online (Sandbox Code Playgroud)
试试(这个失败了)
for /f %%# in ('echo yes ^& rem %') do echo %%#
Run Code Online (Sandbox Code Playgroud)
现在有了
set "') do echo =') do echo %%"
for /f %%# in ('echo yes ^& rem %') do echo %%#
echo displayed
Run Code Online (Sandbox Code Playgroud)
经过一些测试之后编辑似乎问题与for
命令没有关系,而是搜索一个右边的右括号,它以错误的错误处理结束,丢弃在非封闭代码块中解析的所有命令.
这个批处理文件(那些是其中的所有行)
if 1==1 (
for %a in (test) do echo %%a
Run Code Online (Sandbox Code Playgroud)
将失败,语法错误(%a
)显示解析器正在处理它,但如果错误得到纠正
if 1==1 (
for %%a in (test) do echo %%a
Run Code Online (Sandbox Code Playgroud)
批次结束没有任何错误
只是一个简单的批处理,没有if
或for
解析器的差异,行为相同
( echo test
Run Code Online (Sandbox Code Playgroud)