Variáveis locais em funções podem ser usadas para evitar conflitos de nome e manter mudanças de variáveis locais para a função. O comando SETLOCAL é usado primeiro para garantir que o processador do comando faça um backup de todas as variáveis de ambiente. As variáveis podem ser restauradas chamando o comando ENDLOCAL. As alterações feitas no meio são locais para o script de lote atual. ENDLOCAL é chamado automaticamente quando o final do arquivo em lote é alcançado, ou seja, chamando GOTO: EOF.
A localização de variáveis com SETLOCAL permite usar nomes de variáveis dentro de uma função livremente, sem se preocupar com conflitos de nome com variáveis usadas fora da função.
O exemplo a seguir mostra como as variáveis locais podem ser usadas em funções.
Exemplo
@echo off
set str = Outer
echo %str%
CALL :SetValue str
echo %str%
EXIT /B %ERRORLEVEL%
:SetValue
SETLOCAL
set str = Inner
set "%~1 = %str%"
ENDLOCAL
EXIT /B 0
Resultado
No programa acima, a variável 'str' está sendo localizada na função SetValue. Assim, mesmo que o valor str esteja sendo retornado para a função principal, o valor de str na função principal não será substituído pelo valor que está sendo retornado da função.
O comando acima produz a seguinte saída.
Outer
Outer