Поскольку 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
к старому значению, которое было до того, как вы запустили другой код Это должно быть в конце вашего кода.
Дальнейшее чтение