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