จะแสดงรายการตัวแปรสภาพแวดล้อมส่วนกลางแยกจากตัวแปรสภาพแวดล้อมเฉพาะของผู้ใช้ได้อย่างไร


13

ใน Windows (เช่นรุ่น 10) คุณสามารถแสดงรายการตัวแปรสภาพแวดล้อมโดยใช้คำสั่ง

set

คุณจะแสดงรายการตัวแปรสภาพแวดล้อมที่เหมือนกันสำหรับผู้ใช้ทั้งหมดหรือเพียงแค่ตัวแปรสภาพแวดล้อมสำหรับผู้ใช้หรือเซสชันปัจจุบันได้อย่างไร

คำตอบ:


17

สิ่งต่าง ๆ มีความซับซ้อนมากกว่าที่ไมโครซอฟท์บางครั้งทำให้ดูเหมือน

ตัวแปรสภาพแวดล้อมจำนวนมากถูกเก็บไว้ในรีจิสทรี ซึ่งหมายความว่าคุณสามารถค้นหาได้โดยใช้regคำสั่ง

ทั่วไปสำหรับผู้ใช้ทั้งหมด

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

เฉพาะเซสชันผู้ใช้ปัจจุบัน

reg query HKCU\Environment
reg query "HKCU\Volatile Environment"

กำหนดโดยผู้ใช้

หากคุณตั้งค่าตัวแปรสภาพแวดล้อมของคุณเองอย่างถาวรโดยใช้setx variable valueคำสั่งคำสั่งนั้นจะถูกเก็บไว้ในรีจิสทรี

C:\>setx test removeme

SUCCESS: Specified value was saved.

C:\>reg query "HKCU\Environment"

HKEY_CURRENT_USER\Environment
    Path    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Microsoft\WindowsApps;
    TEMP    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Temp
    TMP    REG_EXPAND_SZ    %USERPROFILE%\AppData\Local\Temp
    test    REG_SZ    removeme

หากคุณใช้set variable=valueคำสั่งตัวแปรจะพร้อมใช้งานทันที แต่ไม่ได้เก็บไว้ในรีจิสทรี คุณไม่สามารถใช้คำสั่งในรายการพวกเขาแม้ว่าพวกเขาจะแสดงโดยreg setตัวแปรสภาพแวดล้อมชั่วคราวเหล่านี้ไม่คงอยู่หลังจากที่คุณจบเซสชันพรอมต์คำสั่ง

ตัวแปรสภาพแวดล้อมแบบไดนามิก

มีโครงสร้างที่ทำหน้าที่เหมือนตัวแปรสภาพแวดล้อมที่ไม่ได้จัดเก็บไว้ในรีจิสทรีด้วยวิธีนี้ ตัวอย่างเช่น:

echo %TIME%

1
เพียงแค่ความอยากรู้: เป็นไปได้ไหมที่จะรีเฟรชตัวแปรที่เพิ่มเข้าไปในรีจิสตรีก่อนหน้านี้? เช่นsetx test removemeนั้นบางสิ่งบางอย่างset test %test%เพื่อให้คุณสามารถมีรายการตัวแปรทั้งหมดที่มีง่ายsetหรือไม่ ฉันคิดว่ามันเป็นไปได้ที่จะดำเนินการตามคำสั่งสคริปต์ / ชุดที่จะทำให้ทุกคนอย่างชัดเจนเมื่อมีการร้องขอ ...
แฮสเธอร์

@Hastur: ใช่ว่าจะทำงานเพื่อสร้างตัวแปรใหม่ทั้งพร้อมใช้งานทันทีและถาวร
RedGrittyBrick

@hastur @RedGrittyBrick - เป็นไปได้ แต่ไม่แน่นอนว่าเป็น oneliner ใน windows cmd หากคุณติดตั้ง chocolatey มันมีrefreshenv.cmdยูทิลิตี้ซึ่งเป็น 10 บรรทัดของรหัสและโดยทั่วไปจะสอบถามและรีเฟรชรายการรีจิสตรี
maoizm

ที่ไม่SETคำสั่งแสดงตัวแปรแบบไดนามิกสิ่งแวดล้อม? ฉันพยายามค้นหาทุกอย่างที่ Build Tools ของ Microsoft ตั้งไว้ในระหว่างการใช้งานเพียงแค่ต้องการปกปิดฐานของฉัน
Ungeheuer

2

สำหรับเอาต์พุตแบบคลีนที่ไม่มีบรรทัดเพิ่มเติมและช่องว่างสีดำให้ใช้คำสั่งต่อไปนี้ในcmd.exe:

ตัวแปรสภาพแวดล้อมของผู้ใช้:

FOR /F "tokens=1,3* skip=2" %G IN ('reg query HKCU\Environment') DO @echo %G=%H %I

ตัวแปรสภาพแวดล้อมโกลบอล (ระบบ):

FOR /F "tokens=1,3* skip=2" %G IN ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"') DO @echo %G=%H %I

มันทำงานได้ใน Windows 7-10 และส่วนใหญ่อาจเป็นรุ่นก่อนหน้าเช่นกัน


ขอบคุณสำหรับสิ่งนี้. โปรดทราบว่ามันจะลดลงบางส่วนของค่าถ้ามันมีช่องว่างในนั้น ดังนั้นรายการรีจิสทรีเช่นการแสดงขึ้นเป็นเพียงแค่VS140COMNTOOLS REG_SZ C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools VS140COMNTOOLS=C:\Program
โลหะ

@ โลหะขอบคุณสำหรับการรายงานกรณีมุมนี้ อย่าลังเลที่จะแก้ไขคำตอบหากคุณพบวิธีแก้ปัญหาช่องว่าง - ฉันไม่มีคอมพิวเตอร์ที่ใช้ windows ตอนนี้
maoizm

1
ฉันส่งการอัปเดตไปยังเอฟเฟกต์นั้นแล้ว คุณหรือตัวดัดแปลงบางตัวจะต้องอนุมัติ
โลหะ

1

พิมพ์ชุดคำสั่ง: echo% temp%

หากตัวแปรสภาพแวดล้อม "temp" มี "H: \ Users \ amacm \ AppData \ Local" Windows จะตอบกลับทันทีด้วยสิ่งต่อไปนี้:

H: \ Users \ amacm \ AppData \ Local

หากไม่มีตัวแปรสภาพแวดล้อมชื่อ "temp" Windows จะตอบกลับด้วยสิ่งต่อไปนี้:

% temp%

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.