A variável parece estar definida com valores da última execução.
Isso se deve à maneira como cmd
analisa um arquivo em lotes. Por padrão, as variáveis são expandidas no tempo de análise não no tempo de execução. Isso significa que a variável em loops é avaliada incorretamente, a menos que você ative a Expansão com atraso :
setlocal enabledelayedexpansion
Delayed Expansion will cause variables to be expanded at execution time rather than at parse time, this option is turned on with the
SETLOCAL
command.When delayed expansion is in effect variables can be referenced using
!variable_name!
(in addition to the normal%variable_name%
)
Fonte Expansão atrasada
Use o seguinte arquivo em lotes.
test.cmd:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%a in (data.bat) do (
echo %%a
set server=%%a
echo !server!
)
pause
endlocal
Exemplo de saída:
F:\test>test
1
1
2
2
3
3
4
4
Press any key to continue . . .
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
- enabledelayedexpansion - Expansão com atraso fará com que as variáveis sejam expandidas em tempo de execução e não no tempo de análise.
- setlocal - Defina opções para controlar a visibilidade de variáveis de ambiente em um arquivo em lotes.