Кажется, переменная установлена со значениями последнего запуска.
Это связано с тем, что 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 . . .
Дальнейшее чтение