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

投稿したコードは有効bash scriptではありません。次のようなforループを使用するbatch scriptecho test20回になります。bash script

#/bin/bash

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

よりもはるかに明確で読みやすいbatch scripts、ようこそbash

于 2012-11-16T10:14:18.790 に答える
2

バリCによってすでに説明されているエラーに加えて、コードに潜在的な問題があることに注意する必要があります。このコマンドset /a a=%a%+1の場合:%a%値は、コマンドの実行時に1回だけ展開されます。ifこの場合、gotoコマンドによってif各ループで再度実行されるため、コードが偶然に実行されますが、プログラムがより大きく複雑になり、このsetコマンドが括弧内で数回実行されると、%aが原因でコードが失敗します。 %は、括弧を入力するaに変数が持っていた値に1回だけ展開されます。

この場合、この問題を解決する方法は簡単set /a a=a+1です。コマンドは変数の値を直接取得できるため、パーセント記号を削除するだけです。ただし、ここにはもっと多くのことが関係しています!詳細については、set /?「遅延変数展開」の説明を入力して注意してください。

于 2012-11-16T20:25:26.043 に答える
1

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 に答える