以下是一个例子:
@echo off
for /f %%# in ('rem %') do echo %%#
echo never displayed
(并且输出与此示例稍有不同 - 产生一个空行少 - 尽管脚本应该这样做)
@echo off
for /f %%# in ('rem %') do echo %%#
echo never displayed
如果DO块中没有令牌,则没有问题:
@echo off
for /f %%# in ('rem %') do dir
echo will be displayed
看起来脚本会在遇到%
时尝试展开某个变量,但是它会以某种方式被结束括号中断?
答案 0 :(得分:5)
尝试解释行
时出现解析器错误for /f %%# in ('rem %') do echo %%#
^...........^
undefined variable
for /f %%# in ('rem %') do dir
^
without a closing percent sign, it is discarded
尝试(这失败了)
for /f %%# in ('echo yes ^& rem %') do echo %%#
现在用
set "') do echo =') do echo %%"
for /f %%# in ('echo yes ^& rem %') do echo %%#
echo displayed
经过一些测试后, 编辑似乎问题与for
命令没有关系,而是搜索右边的右括号,以错误的错误处理结束,丢弃所有的在非封闭代码块中解析的命令。
此批处理文件(包含其中的所有行)
if 1==1 (
for %a in (test) do echo %%a
将失败,语法错误(%a
)显示解析器正在处理它,但是如果错误得到纠正
if 1==1 (
for %%a in (test) do echo %%a
批次结束没有任何错误
只是一个简单的批处理,没有if
或for
解析器差异,行为相同
( echo test
答案 1 :(得分:1)
'%'角色必须与另一个'%'字符。你必须使用'#'对于变量名称? [a-z]不适合你吗?
@echo off
for /f %%# in ('rem %%') do echo %%#
echo never displayed