0
echo off

set /a a=0
:start
if %a% LEQ 21(
echo test
set /a a=%a%+1
goto start
)

我不明白...我只在循环开始时收到语法错误。

4

3 回答 3

3

您发布的代码不是有效的,在使用这样的 for 循环中bash script它是20 次:batch scriptecho testbash script

#/bin/bash

for i in {1..20}; do
    echo test
done

比它更清晰易读batch scripts,欢迎使用bash

于 2012-11-16T10:14:18.790 回答
2

除了 Bali C 已经解释的错误之外,您应该注意您的代码存在潜在问题。在此命令set /a a=%a%+1中: %a% 值在命令执行时仅扩展一次。if在这种情况下,您的代码偶然运行,因为该goto命令导致在每个循环中再次执行,但是如果您的程序更大更复杂,并且此 set 命令将在括号内if执行多次,则代码将失败,因为 %a % 将仅扩展一次到变量在输入括号之前的值。a

在这种情况下解决这个问题的方法很简单:只需去掉百分号,因为set /a a=a+1命令可以直接取变量的值。但是,这里涉及的内容更多!有关详细信息,请键入set /?并注意“延迟变量扩展”说明。

于 2012-11-16T20:25:26.043 回答
1

您在 and 之间缺少一个空格21(这将使其将循环中的数字与 进行比较21(,也破坏了if语句,后者是您收到语法错误的原因。

添加一个空格,它工作正常。

echo off

set /a a=0
:start
if %a% LEQ 21 (
echo test
set /a a=%a%+1
goto start
)
于 2012-11-16T10:40:23.503 回答