Làm thế nào để liệt kê các biến môi trường toàn cầu tách biệt với các biến môi trường cụ thể của người dùng?


13

Trong Windows (ví dụ: phiên bản 10), bạn có thể liệt kê các biến môi trường bằng lệnh

set

Làm thế nào để bạn liệt kê chỉ các biến môi trường giống nhau cho tất cả người dùng hoặc chỉ các biến môi trường dành cho người dùng hoặc phiên hiện tại?

Câu trả lời:


17

Mọi thứ phức tạp hơn một chút so với Microsoft đôi khi làm cho nó có vẻ.

Rất nhiều biến môi trường được lưu trữ trong Registry. Điều này có nghĩa là bạn có thể truy vấn chúng bằng reglệnh

Chung cho tất cả người dùng

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

Cụ thể cho phiên người dùng hiện tại

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

Đặt theo người dùng

Nếu bạn đặt vĩnh viễn biến môi trường của riêng mình bằng setx variable valuelệnh, nó sẽ được lưu trong sổ đăng ký nhưng không được cung cấp ngay lập tức.

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

Nếu bạn sử dụng set variable=valuelệnh, biến có sẵn ngay lập tức nhưng không được lưu trong sổ đăng ký. Bạn không thể sử dụng reglệnh để liệt kê chúng mặc dù chúng được hiển thị bởi set. Các biến môi trường tạm thời này không tồn tại sau khi bạn kết thúc phiên nhắc lệnh.

Biến môi trường động

Có các cấu trúc hoạt động giống như các biến môi trường không được lưu trữ trong sổ đăng ký theo cách này. Ví dụ:

echo %TIME%

1
Chỉ là một sự tò mò: có thể làm mới biến được thêm trước đó vào registry không? ví dụ setx test removemesau đó một cái gì đó set test %test%để bạn có thể có tất cả các biến được liệt kê với một đơn giản set? Tôi đã nghĩ rằng có thể thực hiện một tập lệnh / đợt để làm cho tất cả chúng rõ ràng theo yêu cầu ...
Hastur

@Hastur: Có, điều đó sẽ làm việc để tạo một biến mới cả có sẵn ngay lập tức và liên tục.
RedGrittyBrick

@hastur @RedGrittyBrick - có thể nhưng chắc chắn không phải là một oneliner trong windows cmd. Nếu bạn cài đặt chocolatey, nó có refreshenv.cmdtiện ích gồm 10 dòng mã và về cơ bản, nó truy vấn và làm mới các mục đăng ký
maoizm

Liệu SETlệnh hiển thị biến động môi trường? Tôi đang cố gắng tìm mọi thứ và mọi thứ mà Công cụ xây dựng của Microsoft thiết lập trong một phiên, chỉ muốn che đậy căn cứ của tôi.
Ungeheuer

1

Để đầu ra sạch không có thêm dòng và khoảng trắng, hãy sử dụng các lệnh sau trong cmd.exe:

Biến môi trường người dùng:

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

Biến môi trường (hệ thống) toàn cầu:

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

Nó hoạt động trong Windows 7-10, và rất có thể trong các phiên bản trước đó.


Cám ơn vì cái này. Lưu ý rằng nó giảm một phần giá trị nếu nó có khoảng trắng trong đó. Vì vậy, một mục đăng ký như VS140COMNTOOLS REG_SZ C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools hiển thị như chỉ VS140COMNTOOLS=C:\Program.
kim loại

@metal cảm ơn đã báo cáo trường hợp góc này. Vui lòng chỉnh sửa câu trả lời nếu bạn tìm thấy cách giải quyết cho không gian - Hiện tại tôi không có bất kỳ máy tính windows nào
maoizm

Tôi đã gửi một bản cập nhật cho hiệu ứng đó. Bạn hoặc một số mod sẽ cần phải phê duyệt nó.
kim loại

1

gõ lệnh batch: echo% temp%

Nếu biến môi trường "tạm thời" chứa "H: \ Users \ amacm \ AppData \ Local", Windows sẽ trả lời ngay lập tức như sau:

H: \ Users \ amacm \ AppData \ Local

Nếu không có biến môi trường có tên "temp", Windows sẽ trả lời như sau:

% tạm thời%

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.