203

我需要远程访问环境变量。为此,我认为最好的方法是从注册表中读取它。

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

4

4 回答 4

296

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

用户变量

HKEY_CURRENT_USER\Environment

系统变量

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
于 2009-02-21T22:08:36.983 回答
22

在 Windows 7 中有一种更有效的方法。SETX 默认安装并支持连接到其他系统。

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

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

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

/M 指定应在系统范围 (HKEY_LOCAL_MACHINE) 环境中设置变量。默认是在 HKEY_CURRENT_USER 环境下设置变量。

/S system 指定要连接的远程系统。

于 2013-11-26T05:27:02.193 回答
8

命令:

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:(参见EnvironmentVariableTarget 枚举

[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::Machine)
[System.Environment]::GetEnvironmentVariables([System.EnvironmentVariableTarget]::User)
于 2018-01-30T19:37:45.497 回答
3

我总是遇到问题,我制作了一个getx.bat脚本:

:: getx %envvar% [\m]
:: Reads envvar from user environment variable and stores it in the getxvalue variable
:: with \m read system environment

@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 a delimiter
@FOR /F "delims=    " %%A IN (getxfile.tmp.txt) DO (
    @set getxvalue=%%A
)
@del getxfile.tmp.txt

@echo ON
于 2015-01-03T21:10:40.610 回答