0
for /L %%i in (1, 1, 100) do (           
    SET VAR=%%i %% 5
    set /a CAL=%VAR% %% 5
    echo %CAL%
)

こんにちは、上記の簡単なコードです。インデックスを取得して、各インクリメントで % 5 を使用しようとしています。

コマンドラインは私に与えています:

SET VAR = 100 % 5
set /a CAL = % 5
Missing operand. 

私は正確に何を間違っていますか?みんなありがとう

4

2 に答える 2

2

あなたが何をしようとしているのかについて、より良い説明が必要です。機能しないコードから何が必要かを突き止めようとすると、推測ゲームになります。

最初に認識すべきことは、ステートメントを&OR で区切って別の行に配置する必要があることです。そうしないと、右側の ENTIRE 式が に割り当てられVARます。

私はあなたが何を意味したと仮定します

for /L %%i in (1, 1, 100) do (
 SET VAR=%%i %% 5 
 set /a CAL=%VAR% %% 5 
 echo %CAL%
)

これでは、あなたが本当に達成したいことはわかりません。valおそらく、式の値に設定したかったのでしょうスイッチ%%i %% 5が必要です/A

for /L %%i in (1, 1, 100) do (
 SET /A VAR=%%i %% 5 
 set /a CAL=%VAR% %% 5 
 echo %CAL%
)

さて - 次の行、Are you going to set CALto the value of %VAR% %% 5? まあ-それに関するいくつかの問題-最初に、VAR0..4になるので、それに設定CALすると、関係なく0VAR %% 5に設定されます。CAL

2 番目の問題はより重大で、次の行にまで及びます。

FOR ループは、FOR から終わりのかっこまで解析されます。PARSE-TIME で、any%var%は変数の THEN-CURRENT 値に置き換えられます。THENコードが実行されます。

どちらvarcalPARSE時に設定されていないため、実行されるのは

for /L %%i in (1, 1, 100) do (
 SET /A VAR=%%i %% 5 
 set /a CAL= %% 5 
 echo 
)

SET CALそのため、行に「オペランドがありません」というエラーが表示され、ECHO「エコーがオフです」(または場合によってはオン) が適切に報告されます。

これらの問題を克服するには、いくつか変更を加える必要があります...

SETLOCAL ENABLEDELAYEDEXPANSION
for /L %%i in (1, 1, 100) do (
 SET /A VAR=%%i %% 5 
 set /a CAL=!VAR! %% 3 
 echo !VAR! !CAL!
)

ここで、が PARSE-TIME 値を返すが RUN-TIME 値を返すSETLOCAL ENABLEDELAYEDEXPANSIONモードを確立することに注意してください。は 0から4 の間で変化するため、変化を確認できるようにの計算を変更しました。ECHO はとの両方の RUN-TIME 値を報告します。%var%!val!VARCALvarcal

于 2013-03-28T21:11:01.613 に答える
0

次の 2 つのコードは同じ結果になります。最初のものは DelayedExpansion を使用し、はるかに高速ですが、2 番目のものはそれを使用しませんVAR:

@echo off &setlocal enabledelayedexpansion
for /L %%i in (1, 1, 100) do (
    SET /a VAR=%%i %% 5
    set /a CAL=!VAR! %% 5
    echo !CAL!
)

.

@echo off &setlocal
for /L %%i in (1, 1, 100) do (
    set /a CAL="(%%i%%5)%%5"
    call echo %%CAL%%
)
于 2013-03-28T22:57:26.120 に答える