2013-12-12 4 views
0

Я занимаюсь несколькими партиями, и я пытаюсь сделать цикл, чтобы вернуться назад и подсчитать числа от 110 до 100, но только четные числа. Я почти получил его на работу, но по какой-то причине totalCount не обновляется каждый раз, когда цикл for перемещается. В конце он печатает итоговое значение как 100, которое является просто последним числом цикла. Что я делаю не так?Для Loop on Windows Batch

::echo off 
setlocal enableextensions 
setlocal enabledelayedexpansion 

set /a totalCount = 0 

for /l %%x in (110, -2, 100) do (
    set /a totalCount = %totalCount% + %%x 
) 

echo total is %totalCount% 

ответ

1

Попробуйте изменить %totalCount% к !totalCount!. Таким образом, код должен выглядеть следующим образом:

echo off 
setlocal enabledelayedexpansion 

set /a totalCount = 0 

for /l %%x in (110, -2, 100) do (
    set /a totalCount = !totalCount! + %%x 
) 

echo total is !totalCount! 
4

Есть несколько правильных способов сделать это и один неправильный пути. Плохой способ заключается в следующем:

for /l %%x in (110, -2, 100) do (
    set /a totalCount = %totalCount% + %%x 
) 

Поскольку %totalCount% расширяется только один раз, перед for выполняется, так что значение суммы всегда 0 плюс каждый член.

Одним из возможных решений является использование Отложенная расширение, как предложил Дейл:

echo off 
setlocal enabledelayedexpansion 

set /a totalCount = 0 

for /l %%x in (110, -2, 100) do (
    set /a totalCount = !totalCount! + %%x 
) 

echo total is %totalCount% 

Таким образом, значение !totalCount! правильно заменить в каждом for цикле. Однако, это не требуется либо, потому что set /A команды принимает текущее значения переменных сам по себе каждый раз, когда она выполняется:

echo off 

set /a totalCount = 0 

for /l %%x in (110, -2, 100) do (
    set /a totalCount = totalCount + %%x 
) 

echo total is %totalCount% 

Кроме того, set /A команды есть способ приращения переменной, что дон 't даже требует, чтобы написать свое название, поэтому вопрос об этом обсуждении полностью исчезает:

echo off 

set /a totalCount = 0 

for /l %%x in (110, -2, 100) do (
    set /a totalCount += %%x 
) 

echo total is %totalCount%