2013-03-19 42 views
3

這可能短暫而甜蜜,但我只是檢查。批次for循環的遞增值是多少?

一批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 

運行上面的代碼做幾乎我需要的(生成針對序列中的每個變量更高的較高值)。唯一的區別是,我需要步值增加每個循環兩倍。 200第一環路,400秒環,800第三環等

此刻,與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)每次遞增。我真的需要兩倍的增量每次在以前的值。在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 

線佔用了大量的空間。這和我必須計算每一行。

回答

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 
+0

天才,謝謝彼得。 +25爲你:] – 2013-03-19 17:42:33

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索引,其中element[0]是第一要素,element[1]是第二個,等等。

+0

謝謝rojo,我敢肯定你的正確,但我已經開始,所以我會完成:]我也通過www.codecademy.com JavaScript課程的一半,但當我完成這個小項目,我會拿起更多的JavaScript。 – 2013-03-19 18:57:09

0

您也可以使用%,而%循環以這種方式解決這個問題:

@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行詳細描述在this site。該方法可以以更通用的方式使用,並且更清楚(即,對於「原始程序」行)。

Antonio