Арифметика внутри пакетного файла цикла 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