3

これは短くて甘いかもしれませんが、チェックしているだけです。

バッチforコマンドのステップ値を増やすことはできますか?

@echo off
SetLocal EnableDelayedExpansion
set xyz=200
for /l %%n in (100,%xyz%,26000) do (
    set /a value_=!value_!+1
    set x=%%n
    set value_!value_!=!x!
    echo value_!value_!=!x!
)
echo.
echo variable 'value_5' = !value_5!
echo.
pause

上記のコードを実行すると、必要なことのほとんどが実行されます(順番に、より高い変数ごとにより高い値が生成されます)。唯一の違いは、ステップ値をループごとに 2 倍にする必要があることです。+200 第 1 ループ、+400 第 2 ループ、+800 第 3 ループなど。

現時点では、各ループが 200 の場合、出力は次のようになります。

value_1=100
value_2=300
value_3=500
value_4=700
value_5=900
value_6=1100
value_7=1300
...

...
variable 'value_5' = 900

毎回 200 (xyz) ずつ増加します。前の値のたびにステップの増分を 2 倍にする必要があります。for ステートメントの内部または外部に計算を追加しても、出力は変わりません。

したがって、出力は次のようになります。

value_1=100
value_2=300
value_3=700
value_4=1500
value_5=3100
value_6=6300
value_7=12700
value_8=25500

variable 'value_5' = 3100

それが理にかなっていることを願っています。それが不可能な場合、これを行う別の簡単な方法はありますか、それともたくさんの方法があります

set value_1=100
set value_2=300
...

...
set value_98=xxx
set value_99=xxx

多くのスペースを占める行。それと私は各行を計算する必要があります。

4

3 に答える 3

2
@echo off
SetLocal EnableDelayedExpansion
set xyz=200
SET minval=100
SET maxval=26000
SET /a numvals=2+((maxval-minval) / xyz)
SET num
for /l %%n in (1,1,%numvals%) do (
    IF !minval! LEQ %MAXVAL% (
     set /a value_%%n=!minval!
     SET /a minval+=xyz
     SET /a xyz=2*!xyz!
     )
)
echo.
echo variable 'value_5' = !value_5!
echo.
SET value_
pause
于 2013-03-19T17:20:44.260 に答える
1

バッチがこれに最適な言語であると確信していますか? JScript で探しているものは次のとおりです。

// test.js
var val=[];
for (var x=y=100; x<=26000; y*=2, x+=y) {
    val.push(x);
    n = val.length - 1;
    WSH.echo("val[" + n + "]=" + x);
}
WSH.echo("\nvariable 'val[4]' = " + val[4] + '\n');

出力:

C:\Users\me\Desktop>cscript /nologo test.js
val[0]=100
val[1]=300
val[2]=700
val[3]=1500
val[4]=3100
val[5]=6300
val[6]=12700
val[7]=25500

variable 'val[4]' = 3100

JavaScript 配列は 0-index であることに注意してelement[0]くださいelement[1]

于 2013-03-19T18:10:32.143 に答える
0

%While% ループを使用して、この問題を次のように解決することもできます。

@echo off
setlocal EnableDelayedExpansion
rem Define auxiliary While variables
set While=if "%1" equ "While" ( for /L %%? in () do if
set Do=(
set EndWhile=) else exit ) else for /F %%a in ('cmd /Q /C "%~F0" While') do set %%a
rem While dispatcher
if "%1" equ "While" goto WhileBody
rem Original program
set xyz=200
set n=100
:WhileBody
%While% !n! leq 26000 %do%
    set /A value_+=1
    set value_!value_!=!n!
    echo value_!value_!=!n!
    set /A n+=xyz, xyz*=2
%EndWhile%
set value_
echo.
echo variable 'value_5' = !value_5!
echo.
pause

以前のプログラムの最初の 8 行は、このサイトで詳細に説明されています。この方法は、より一般的な方法で使用でき、より明確です (つまり、「元のプログラム」行の場合)。

アントニオ

于 2013-03-20T05:00:30.900 に答える