环境变量存储在注册表中的什么位置?


Answers:


282

它们是通过Server 2012 R2在XP上存储的位置:

用户变量

HKEY_CURRENT_USER\Environment

系统变量

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

7
请记住重新启动系统,以使更改生效。
0x6B6F77616C74 '08

22
您不需要重新启动。只需杀死Explorer.exe并将其恢复活动即可。这是cmd.exe的父进程(从“开始”菜单启动时)
Cristian Diaconescu 2012年

2
IIS等其他进程呢?我猜Explorer.exe不是这些的父级,因此需要重新启动吗?
科林2013年

3
进程在启动时会读入系统环境变量。因此,使用IIS之类的东西,重新启动该服务应带来更新后的值。
史蒂夫·谢弗勒

11
用户路径变量(我的文档,AppData等)存储在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
mythofechelon

22

我意识到这很旧,但是在Windows 7中有一种更有效的方法。SETX默认安装,并且支持连接到其他系统。

要修改远程系统的全局环境变量,请使用

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

这不需要重新启动资源管理器。


9
请注意这一点,因为setx会在1024个字符之后截断所有内容!!!superuser.com/questions/387619/…–
WalyKu

5

命令:

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

电源外壳:

Get-Item "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
Get-Item HKCU:\Environment

Powershell / .NET :(请参阅https://msdn.microsoft.com/zh-cn/library/system.environmentvariabletarget(v=vs.110).aspx

[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::Machine)
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User)

3

我一直对此有疑问,我做了一个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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.