Кажется, переменная установлена со значениями последнего запуска.
Это из-за способа cmd
анализирует командный файл По умолчанию переменные раскрываются во время разбора не во время выполнения. Это означает, что переменные в циклах оцениваются неправильно, если вы не включите Задержка расширения :
setlocal enabledelayedexpansion
Задержка расширения вызовет расширение переменных во время выполнения, а не во время разбора, эта опция включается с SETLOCAL
команда.
Когда действует отложенное расширение, на переменные можно ссылаться, используя !variable_name!
(в дополнение к обычному %variable_name%
)
Источник Задержка расширения
Используйте следующий пакетный файл.
test.cmd:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (data.bat) do (
echo %%a
set server=%%a
echo !server!
)
pause
endlocal
Пример вывода:
F:\test>test
1
1
2
2
3
3
4
4
Press any key to continue . . .
Дальнейшее чтение