なぜあなたは%
兆候のペアで変数名を囲んでいますか?変数を読み取るための通常の構文は%var1%
です。
set /A
は、パーセント記号がなくても変数を読み取ることができるため、set /a b=var1 %% 25
を使用してください。
他のset /A
コマンドラインはset /A var1+=1
に変更できます。
あなたは同じコード(括弧の)ブロック内でそれを読んとを書いているので、全体for
ループが解析されるとき%b%
が読み込まれ、その時点でので、あなたのコード内の1つの問題の変数、すなわちb
は、ありますそれはおそらく空です。
このような場合は、delayed expansionを適用する必要があります。そのため、実行時に変数が読み取られます。有効にするには、setlocal
コマンドを使用します。それを実際に使用するには%b%
の代わりに!b!
と書いてください。ケースには、感嘆符が含まれているため、ここで
set /A var1=0
for /R "folder" %%G in (.) do (
pushd "%%~G"
set /A b=var1 %% 25
setlocal EnableDelayedExpansion
if !b! EQU 0 (
timeout /T 3
)
endlocal
set /A var1+=1
popd
)
遅延膨張for
ループ変数%%G
の膨張(読み出し)の間ディスエーブルされるように、私はループ内setlocal
とendlocal
を配置:ここ
は、固定コードでありますそれ以外の場合は失われます。
まあ、私は、無効なオペランドから抜け出すために管理が、私はモジュロ演算子が –
あなたが仕事を得るように見えることはできませんだけで、 ''%VAR1%をする必要はありません。しかし、正しいポーズは以下で導入されました'%% var1 %%'。 – SomethingDark
@SomethingDark、一般的にはあなたが正しいですが、ここでは遅延拡張が必要です(少なくとも '!b!'の場合)... – aschipfl