2009-02-21 7 views

ответ

237

Вот где они хранятся на XP через Server 2012 R2:

Переменные пользователя

HKEY_CURRENT_USER\Environment 

Системные переменные

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 
+2

Не забудьте перезагрузить систему, чтобы внести изменения в силу. – 0x6B6F77616C74

+15

Вам не нужно перезагружать компьютер. Просто запустите Explorer.exe и верните его обратно. Это родительский процесс, например. cmd.exe (при запуске из меню «Пуск») –

+2

Как насчет других процессов - например, IIS? Я предполагаю, что Explorer.exe не является родителем для них, поэтому потребуется перезагрузка? – Colin

17

Я понимаю, что это старый, но есть более эффективный способ сделать это в Windows 7. SETX устанавливается по умолчанию и поддерживает подключение к другим системам.

Чтобы изменить удаленные системы глобальные переменные окружения вы бы использовать

setx /m /s HOSTNAME-GOES-HERE VariableNameGoesHere VariableValueGoesHere 

Это не требует перезапуска проводника.

+0

Будьте осторожны с этим, так как setx урезает все после 1024 charachters !!! https://superuser.com/questions/387619/overcoming-the-1024-character-limit-with-setx – WalyKu

4

У меня всегда были проблемы с этим, я сделал getx.bat:

::getx %envvar% [\m] 
::reads envvar from user enviroment variable and stores it in getxvalue variable 
::with \m read system enviroment 

@SETLOCAL EnableDelayedExpansion 
@echo OFF 

@set l_regpath="HKEY_CURRENT_USER\Environment" 
@if "\m"=="%2" set l_regpath="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" 

::REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH /t REG_SZ /f /d "%PATH%" 
::@REG QUERY %l_regpath% /v %1 /S 

@FOR /F "tokens=*" %%A IN ('REG QUERY %l_regpath% /v %1 /S') DO (
@ set l_a=%%A 
@ if NOT "!l_a!"=="!l_a: =!" set l_line=!l_a! 
) 

::delimiter is four spaces change it to tab \t 
@set l_line=!l_line! 
@set l_line=%l_line: = % 

@set getxvalue= 

@FOR /F "tokens=3* delims= " %%A IN ("%l_line%") DO (
@ set getxvalue=%%A 
) 
@set getxvalue=!getxvalue! 
@echo %getxvalue% > getxfile.tmp.txt 
@ENDLOCAL 

::we already used tab as delimiter 
@FOR /F "delims= " %%A IN (getxfile.tmp.txt) DO (
    @set getxvalue=%%A 
) 
@del getxfile.tmp.txt 

@echo ON 
0

CMD:

reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" 
reg query HKEY_CURRENT_USER\Environment 

Powershell:

gi "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" 
gi HKCU:\Environment 

Powershell/.NET: (см https://msdn.microsoft.com/en-us/library/system.environmentvariabletarget(v=vs.110).aspx)

[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::Machine) 
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User) 
Смежные вопросы