No seu batchfile defina ABC para outro var. Você pode fazer isso da seguinte maneira:
set DEF=%ABC%
um exemplo:
set ABC=testing
set DEF=%ABC%
set ABC=changed
echo %ABC%
:: prints: changed
echo %DEF%
:: prints: testing
No seu batchfile defina ABC para outro var. Você pode fazer isso da seguinte maneira:
set DEF=%ABC%
um exemplo:
set ABC=testing
set DEF=%ABC%
set ABC=changed
echo %ABC%
:: prints: changed
echo %DEF%
:: prints: testing
Você não pode evitar y.bat
de alterar o valor na variável. As variáveis de ambiente não podem ser definidas como constantes nem marcadas como somente leitura ou protegidas contra gravação. Se o arquivo de lote chamado alterar a variável e você não puder alterar o arquivo de lote, não será possível evitar a alteração.
A única coisa que você pode evitar é a propagação das mudanças na variável para afetar o x.bat
x.bat
@echo off
set "abc=set from x.bat"
setlocal
call y.bat
endlocal
echo %abc%
y.bat
@echo off
set "abc=changed value"
setlocal
gera uma cópia do espaço do ambiente e define essa cópia como ativa. Todas as alterações são feitas nesta cópia até o próximo endlocal
que descarta a cópia e restaura o ambiente anterior.
Tags batch-file