【问题标题】:Can a Batch for loop have an increasing step value?Batch for 循环可以增加步长值吗?
【发布时间】:2013-03-19 16:48:47
【问题描述】:

这可能很简短,但我只是在检查。

批处理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

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

【问题讨论】:

    标签: batch-file batch-processing


    【解决方案1】:
    @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
    

    【讨论】:

      【解决方案2】:

      您确定批处理是最好的语言吗?以下是您在 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] 是第二个元素,依此类推。

      【讨论】:

      • 谢谢 rojo,我确定你是对的,但我已经开始,所以我会完成 :] 我也完成了 www.codecademy.com JavaScript 课程的一半,但是当我完成时通过这个小项目,我将学习更多 JavaScript。
      【解决方案3】:

      你也可以使用 %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有详细描述。这种方法可以用在更通用的方式上,也更清晰(即用于“Original program”这一行)。

      安东尼奥

      【讨论】:

        猜你喜欢
        • 2022-12-04
        • 1970-01-01
        • 2012-10-03
        • 2012-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-24
        • 1970-01-01
        相关资源
        最近更新 更多