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

运行上面的代码几乎可以满足我的需要(针对每个更高的变量依次生成更高的值)。唯一的区别是我需要每个循环将步长值增加两倍。+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

线条占用大量空间。那我必须计算每一行。

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 索引的,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 行。这种方法可以用在更通用的方式上,也更清晰(即对于“Original program”这一行)。

安东尼奥

于 2013-03-20T05:00:30.900 回答