在批处理脚本中编写For循环

时间:2016-03-16 19:36:03

标签: batch-file

我目前正忙于处理批处理脚本的操作系统类的作业。我遇到的主要问题是在程序中编写一个函数for循环,精确地通过1到100的范围,并通过算术表达式%% variable mod 5 + 3计算总和。

当前的结果我得到的范围是从运行时只得到0作为答案,或者加3的数字,例如3,然后是6然后是9等。

以下是我的代码的相应部分:

for /l %%i in (1, 1, 100) do (
set /a result = %%i %% 5
set /a calctotal = %result% + 3
)
set /a average = %calctotal%/100
echo %average%
pause

1 个答案:

答案 0 :(得分:1)

SET /a calctotal=0
for /l %%i in (1, 1, 100) do (
 set /a result = %%i %% 5
 set /a calctotal += result + 3
)
set /a average = %calctotal%/100
echo %average%

对我来说问题是“通过算术表达式%%变量mod 5 + 3计算总和”的解释

现在这意味着the sum of (%%variable mod 5 + 3)(the sum of (%%variable) mod 5 + 3 ??

无论如何,你的代码存在一些问题(好吧,如果没有,你不会问,是吗?)

首先,在'block'(带括号的系列行)中,任何%var%在遇到块时被var的值替换,并且在执行块时不会更改。处理此问题的经典方法是调用delayedexpansion

因此,在您的代码中,您执行set /a calctotal = + 3 100次,因为%result%将被循环开始时的值替换(可能未定义,因此没有

下一个问题是,您尝试将calctotal设置为result的最新值 - 您不是累积值。

然而在这种情况下,您可以使用set /a语法,该语法适用于变量的current值 - 前提是您不要将它们调用为{{ 1}}。

%var%使用set /a calctotal += result + 3来累积值。您也可以使用+=,这可能更明显。

我在开始之前将set /a calctotal = calctotal + result + 3设置为零,以防它设置好。

毫无疑问,您可以使用calctotal

删除对result的需求