Почему эта пакетная переменная никогда не меняется, даже если установлена? - PullRequest
12 голосов
/ 16 октября 2010
@echo off
SET first=0
FOR %%N IN (hello bye) DO (
SET first=1
echo %first%
echo %%N
)

Кажется, что переменная "first" всегда равна 0. Почему?

1 Ответ

25 голосов
/ 16 октября 2010

В пакетных файлах переменные раскрываются при чтении их команды, так что это произойдет сразу после выполнения for. В этот момент он больше не говорит echo %first%, он буквально говорит echo 0, потому что это было значение в точке расширения.

Чтобы обойти это, вам нужно использовать отложенное расширение, заключив имя вашей переменной в ! вместо % - так что это будет echo !first!. Для этого может потребоваться запустить cmd.exe с параметром / V или использовать setlocal enabledelayedexpansion в начале вашего пакетного файла (сразу после echo off).

Если вы введете set /?, вы увидите более подробное объяснение этого в конце вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...