这可能是短暂而甜蜜的,但我只是在检查。
批处理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
线占用了大量空间。那我和我必须计算每一行。
答案 0 :(得分: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
答案 1 :(得分: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]
是第二个元素,等等。
答案 2 :(得分: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行详细描述于this site。此方法可以更通用的方式使用,更清晰(即“原始程序”行)。
安东尼奥