ตัวแปรสภาพแวดล้อมเก็บไว้ในรีจิสทรีที่ไหน


191

ฉันจำเป็นต้องเข้าถึงตัวแปรสภาพแวดล้อมจากระยะไกล เมื่อต้องการทำสิ่งนี้ฉันคิดว่าวิธีที่ดีที่สุดคืออ่านจากรีจิสทรี

ตัวแปรสภาพแวดล้อมเก็บไว้ในรีจิสทรีที่ไหน

คำตอบ:


283

ที่นี่จัดเก็บไว้ใน XP ผ่าน Server 2012 R2:

ตัวแปรผู้ใช้

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
กระบวนการอ่านในระบบ env ตัวแปรในเวลาที่พวกเขาเริ่ม ดังนั้นด้วยบางสิ่งเช่น IIS การเริ่มต้นบริการใหม่นั้นควรนำค่าที่ได้รับการปรับปรุงมาให้
Steve Scheffler

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

สิ่งนี้ไม่ต้องการการเริ่มระบบใหม่ explorer


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

Powershell:

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=vsv10.1).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.