【问题标题】:Batch - For Loop 1-100, mod 5 for each批处理 - For Loop 1-100,每个 mod 5
【发布时间】:2014-12-06 22:18:53
【问题描述】:

班级的批次...无法弄清楚。目前有

:forLoop
echo.
for /L %%x in (1, 1, 100) do ( 
    SET /A result=%%x %% 2
    echo %%x
)

各位有什么想法吗?

编辑:我正在尝试使用 for 循环从 1 迭代到 100。然后在 for 循环中获得模数 1、2、3、4 等。所以在我的示例中,它将是模数 x。其中 x 不断增加。

【问题讨论】:

  • 不知道什么?您的问题陈述不清楚,因此我们不知道您遇到了什么问题以及您无法弄清楚什么。
  • 对不起。我正在尝试使用 for 循环从 1 迭代到 100。然后在 for 循环中获得模数 1、2、3、4 等。所以在我的示例中,它将是模数 x。其中 x 不断增加。

标签: loops batch-file for-loop modulus


【解决方案1】:

试试这个:

SETLOCAL ENABLEDELAYEDEXPANSION

:forLoop
echo.
for /L %%x in (1, 1, 100) do ( 
    SET /A result=%%x %% 2
    echo !result!
)

第一个命令是在执行时扩展变量所必需的。

使用! 符号执行变量的延迟扩展(在运行时)。

如果您使用%,您将获得解析时间值。

编辑:

考虑到 Stephan 的建议,我发现我们可以使用 call 来获得更短的解决方案:

for /L %%x in (1, 1, 100) do (
    set /A result="%%x %% 2"
    call echo %%result%%
)

【讨论】:

  • 好的,成功了。谢谢你。如果没有 SETLOCAL ENABLEDELAYEDEXPANSION 并且只有一个简单的 for 循环,我有什么办法可以做到这一点?
  • @Rib 我认为你不能。块语句用括号括起来,在这个块内任何%variable% 都将在解析时被它的值替换,这是在块执行之前。您需要不断变化的运行时值,然后您需要以!variable! 访问它的值,为此需要SETLOCAL ENABLEDELAYEDEXPANSION 命令让解析器识别!。顺便说一句,如果它对你有帮助,你可以接受这个答案。
  • @JosEdu:不太正确。您可以使用for /L %%x in (1,1,100) do call :doit %%x,然后在“子程序”中使用:doit-set /a result=%1 %%2-echo %result%-goto :eof。这样,就不需要延迟扩展。但是我不知道,这是否适合“只有一个简单的 for 循环”
  • 这适用于通话。我刚刚意识到我需要获得模数的平均值。我会使用 call set /A temp=%%results%%+temp 吗?
  • @Rib 我认为最好了解延迟扩展,当您尝试做更复杂的事情时它会更有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
  • 2020-08-08
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
  • 2021-08-08
相关资源
最近更新 更多