レジストリのどこに環境変数が保存されていますか?


190

リモートで環境変数にアクセスする必要があります。これを行うには、レジストリから読み取ることが最善の方法だと思います。

レジストリのどこに環境変数が保存されていますか?

回答:


282

これらは、Server 2012 R2を介してXPに格納されています。

ユーザー変数

HKEY_CURRENT_USER\Environment

システム変数

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

7
変更を有効にするには、システムを再起動することを忘れないでください。
0x6B6F77616C74

22
再起動する必要はありません。Explorer.exeを強制終了し、それを元に戻します。これは、たとえばcmd.exeの親プロセスです([スタート]メニューから開始した場合)
Cristian Diaconescu

2
IISのような他のプロセスについてはどうですか?Explorer.exeはそれらの親ではないので、再起動が必要でしょうか?
コリン

3
プロセスは、開始時にシステム環境変数を読み込みます。したがって、IISなどの場合、そのサービスを再起動すると、更新された値が取り込まれます。
Steve Scheffler、2013年

11
ユーザーパス変数(My Documents、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

cmd:

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/en-us/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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.