Eu tenho o seguinte código:
echo off
set n=11
set m=12
set /a nme=3
set /a mdiff=nme-1
pause
if %n% NEQ %m% (
if %mdiff% LEQ 3 (
for /l %%C in (1,1,3) do (
if %%C EQU 1 (
set mon=Apr
)
set num=1%mon%
)
)
)
echo %num%
pause
o que me dá saída 1
ao invés de 1Apr
. Porém quando eu coloco set num=1%mon%
fora de todos os if e for loops dá resultado correto.
Por favor, me explique o que aconteceu aqui e como obter o resultado correto dentro dos loops.
Além disso, qual é a profundidade máxima de if
e for
níveis?
mon=Apr
e não concatenar com 1.Respostas:
O que você precisa fazer é colocar um
SetLocal EnableDelayedExpansion
no topo do seu script e use!
s em torno de suas variáveis.Basicamente, o
for
loop é analisado uma vez. Cada iteração do loop, as instruções são executadas. Ao ativar esta opção, as variáveis podem mudar em execução, sem reparos, ou seja, dentro do loop.fonte
!nme!
na linha 13, mas pode haver outros erros. Além disso, se esta resposta te ajudou com esta questão em particular (variável em loop), por favor aceite a resposta clicando no carrapato à esquerda.