- У меня есть два пакетных файла x.bat и y.bat.
- Я звоню y.bat из x.bat.
- Файл y.bat устанавливает переменную env, например: set ABC =
- Ограничение - я не могу изменить этот файл Y.bat, но я хочу, чтобы моя переменная "ABC" была установлена как-то иначе.
- Как я могу установить "ABC" в X.bat, чтобы он не переопределялся командой y.bat file set.
2 ответа
В вашем пакетном файле установите ABC на другую переменную. Вы можете сделать это следующим образом:
set DEF=%ABC%
пример:
set ABC=testing
set DEF=%ABC%
set ABC=changed
echo %ABC%
:: prints: changed
echo %DEF%
:: prints: testing
Вы не можете избежать y.bat
от изменения значения в переменной. Переменные среды не могут быть определены как константы и не помечены как доступные только для чтения или защищенные от записи. Если вызываемый пакетный файл меняет переменную, и вы не можете изменить пакетный файл, вы не можете избежать изменения.
Единственное, чего вы можете избежать - это распространения изменений в переменной, влияющих на 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
генерирует копию пространства среды и устанавливает эту копию как активную. Все изменения выполняются в этой копии до следующего endlocal
который удаляет копию и восстанавливает предыдущую среду.