为什么如果我在FOR处理的项目中放入奇数的%s,命令会退出脚本?

时间:2015-10-29 14:55:43

标签: batch-file

以下是一个例子:

@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

看起来脚本会在遇到%时尝试展开某个变量,但是它会以某种方式被结束括号中断?

2 个答案:

答案 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

批次结束没有任何错误

只是一个简单的批处理,没有iffor解析器差异,行为相同

( echo test

答案 1 :(得分:1)

'%'角色必须与另一个'%'字符。你必须使用'#'对于变量名称? [a-z]不适合你吗?

@echo off
for /f %%# in ('rem %%')  do echo %%#
echo never displayed