Арифметика внутри пакетного файла цикла for

у меня есть цикл for в пакетный файл, который выглядит так:

for %%y in (100 200 300 400 500) do (
    set /a x = y/25     
    echo %x%
)

строку:

set /a x = y/25

похоже, не делает никакого разделения. Каков правильный синтаксис для деления каждого y на 25? Мне нужен только целочисленный результат от этого деления.

2 ответов


переменные среды не нужно расширять для использования в инструкции SET /A. Но для переменных необходимо расширить.

кроме того, даже если бы ваше вычисление работало, Эхо потерпело бы неудачу, потому что процентное расширение происходит, когда оператор анализируется, и вся конструкция FOR анализируется сразу. Таким образом, значение %x% будет значением, как оно существовало до выполнения цикла. Чтобы получить значение, заданное в цикле, вы должны использовать отложенное расширение.

также вы следует удалить пробел перед оператором присваивания. Вы объявляете переменную с пробелом в имени.

@echo off
setlocal enableDelayedExpansion
for %%A in (100 200 300 400 500) do (
  set n=%%A

  REM a FOR variable must be expanded
  set /a x=%%A/25

  REM an environment variable need not be expanded
  set /a y=n/25

  REM variables that were set within a block must be expanded using delayed expansion
  echo x=!x!, y=!y!

  REM another technique is to use CALL with doubled percents, but it is slower and less reliable
  call echo x=%%x%%, y=%%y%%
)

Он ничего не делает, потому что "y" - это просто буква. Для ссылки на переменную нужны знаки процента.

set /a x = %%y/25