Переменные среды хранятся в HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet \ Control \ Session Manager \ Environment.
Многие из полезных переменных env, такие как Path, хранятся как REG_SZ. Существует несколько способов доступа к реестру, включая REGEDIT:
<code>REGEDIT /E <filename> "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment"
Вывод начинается с магических чисел. Таким образом, чтобы найти его с помощью команды find, его нужно набрать и перенаправить: type <filename> | findstr -c:\"Path\"
Итак, если вы просто хотите обновить переменную пути в текущем сеансе команды с помощью того, что находится в системных свойствах, следующий пакетный скрипт работает нормально:
RefreshPath.cmd:
@echo off
REM This solution requests elevation in order to read from the registry.
if exist %temp%\env.reg del %temp%\env.reg /q /f
REGEDIT /E %temp%\env.reg "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session Manager\Environment"
if not exist %temp%\env.reg (
echo "Unable to write registry to temp location"
exit 1
)
SETLOCAL EnableDelayedExpansion
for /f "tokens=1,2* delims==" %%i in ('type %temp%\env.reg ^| findstr -c:\"Path\"=') do (
set upath=%%~j
echo !upath:\\=\! >%temp%\newpath
)
ENDLOCAL
for /f "tokens=*" %%i in (%temp%\newpath) do set path=%%i