批处理“while”循环不起作用,但为什么呢?

时间:2012-11-16 10:05:38

标签: loops batch-file while-loop

echo off

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

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

3 个答案:

答案 0 :(得分:3)

您发布的代码不是有效的bash script batch scriptecho test使用for循环bash script 20次:

#/bin/bash

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

batch scripts更清晰,更易读,欢迎来到bash

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

您错过21(之间的空格,这会使循环中的数字与21(进行比较,同时打破if声明,后者为为什么你会遇到语法错误。

添加空格,效果很好。

echo off

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