Используйте переменную в цикле for - PullRequest
3 голосов
/ 16 июня 2011

У меня есть следующий код:

@echo off
SET ITER=0
for %%i in (%*) do (
  SET ITER+=1
  ECHO %ITER%
)

Вывод (для трех аргументов):

0
0
0

Ожидаемый вывод:

1
2
3

Почему можно 'Доступ к обновленной переменной в цикле for?

1 Ответ

5 голосов
/ 16 июня 2011

Расширение переменных с процентами выполняется до выполнения оператора / блока.
Таким образом, в вашем случае полный блок расширяется до выполнения echo %ITER% до постоянной echo 0.
Сама переменная ITER корректно обновляется в цикле.

Чтобы избежать этого, вы можете использовать отложенное расширение, это работает как процентное расширение, но только в момент выполнения

@echo off
setlocal EnableDelayedExpansion
SET ITER=0
for %%i in (%*) do (
  SET /a ITER+=1
  ECHO !ITER!
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...