Как сбросить / удалить переменные окружения, установленные с помощью setx в Windows? - PullRequest
1 голос
/ 07 июня 2019

Исходное состояние: ABC_HOME C:\abc\bin\

начало пакетного файла setx ABC_HOME "%ABC_HOME%;E:\newAbc\abc\bin\"
....
после соответствующего выполнения
*What is the command* - выполнить эту команду, чтобы получить конечное состояние.

Конечное состояние: ABC_HOME C:\abc\bin\

1 Ответ

2 голосов
/ 07 июня 2019

Поскольку ABC_HOME определено до начала пакетного файла, мы можем просто установить временную переменную для хранения старого значения:

SET OLD_ABC_HOME=%ABC_HOME%
setx ABC_HOME "%ABC_HOME%;E:\newAbc\abc\bin\"
<your code here>
setx ABC_HOME %OLD_ABC_HOME%

Если, однако, вы используете setx несколько раз в одном и том же пакетном файле, вам придется запросить реестр, чтобы получить обновленное значение, чтобы вы могли использовать что-то вроде:

setx ABC_HOME C:\abc\bin\
FOR /F "tokens=2* delims= " %%a IN ('reg query HKCU\Environment /v ABC_HOME') DO SET OLD_ABC_HOME=%%b
setx ABC_HOME "%ABC_HOME%;E:\newAbc\abc\bin\"
<your code here>
setx ABC_HOME %OLD_ABC_HOME%

Причина этого в том, что setx не относится к среде cmd.exe экземпляра, в котором он запущен.

Объяснение

  • reg query HKCU\Environment /v ABC_HOME использует реестр Windows для получения значения переменной ABC_HOME, так как она недоступна в вашей пакетной среде.
  • FOR /F "tokens=2* delims= " %%a IN ('...') DO перебирает выходные данные команды reg query и разделяет ее на три части.
    • delims= установит пробел в качестве разделителя для разделения вывода
    • tokens=2* указывает, какие части разделенного вывода мы хотим. Второй фрагмент войдет в переменную %%a, а третий фрагмент и все последующие части перейдут в переменную %%b. Таким образом, ваши переменные могут содержать пробелы.
    • SET OLD_ABC_HOME=%%b установит временную переменную среды, содержащую содержимое ABC_HOME.
  • setx ABC_HOME %OLD_ABC_HOME% вернет ABC_HOME к старому значению, которое было до того, как вы запустили другой код Это должно быть в конце вашего кода.

Дальнейшее чтение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...