• У меня есть два пакетных файла x.bat и y.bat.
  • Я звоню y.bat из x.bat.
  • Файл y.bat устанавливает переменную env, например: set ABC =
  • Ограничение - я не могу изменить этот файл Y.bat, но я хочу, чтобы моя переменная "ABC" была установлена как-то иначе.
  • Как я могу установить "ABC" в X.bat, чтобы он не переопределялся командой y.bat file set.

2 ответа2

0

В вашем пакетном файле установите ABC на другую переменную. Вы можете сделать это следующим образом:

set DEF=%ABC%

пример:

set ABC=testing
set DEF=%ABC%
set ABC=changed

echo %ABC%
:: prints: changed

echo %DEF%
:: prints: testing
0

Вы не можете избежать 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 который удаляет копию и восстанавливает предыдущую среду.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .