Đánh giá% PATH% dưới dạng biến môi trường phạm vi hệ thống


2

Trong dòng lệnh của Windows, echo %PATH%xuất hiện để hợp nhất hệ thống và các biến người dùng PATHtheo thứ tự như vậy trước khi in. Điều đó có vẻ hợp lý, nhưng tôi cũng muốn chỉ có thể in biến hệ thống (hoặc, thay vào đó, chỉ có biến người dùng).
Lưu ý rằng đó echochỉ là một ví dụ, tôi hy vọng nó sẽ hoạt động với bất kỳ lệnh nào khác.

Người ta có thể dễ dàng thiết lập bằng cách sử dụng (hoặc không) /Mcờ khi ban hành SETXlệnh:

SETX PATH "D:\some\user\path"
^ sets the user variable PATH
SETX PATH "C:\some\system\path" /M
^ sets the system-wide variable PATH

Nhưng đánh giá %PATH% theo cách đó dường như không đơn giản (hoặc thậm chí có thể). Chỉ cần gõ vào %PATH%kết quả trong:

C:\some\system\path;D:\some\user\path

Chỉ có thể lấy lại C:\some\system\path(hoặc chỉ D:\some\user\path)?

Tôi nhận thức được sự tồn tại của giao diện GUI cho phép người ta dễ dàng phân biệt giữa hai giao diện này. Tuy nhiên, tôi muốn đạt được nhiệm vụ này chỉ bằng dòng lệnh.

Câu trả lời:


2

Bạn luôn có thể truy vấn trực tiếp các giá trị đăng ký:

for /f "skip=2 tokens=2*" %a in ('reg query HKCU\Environment /v PATH') do @echo %b

for /f "skip=2 tokens=2*" %a in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH') do @echo %b

1
for /f "tokens=2*" %a in ('reg query HKCU\Environment /v PATH 2^>NUL') do @echo %bđể tránh LRI: Hệ thống không thể tìm thấy khóa hoặc giá trị đăng ký được chỉ định (ghi chú 2^>NUL). Hơn nữa, có thể loại bỏ skip=2vì nó quá dư thừa cho trường hợp này (nhưng vẫn quan trọng đối với HKLMtruy vấn)
JosefZ

1
@JosefZ: Có, tôi đã đề cập đến trường hợp không có giá trị Đường dẫn người dùng tồn tại. Thay vì chuyển hướng nó sang NUL, người ta cũng có thể dễ dàng kiểm tra lỗi được trả lại và tắt nhánh tương ứng trong một tệp bó. Ngoài ra, khi Đường dẫn người dùng tồn tại, skip=2được yêu cầu chỉ nhận giá trị mà không có gì thêm.
Karan

1
for /f "tokens=2*" %a in ('reg query HKCU\Environment /v TEMP') do @echo "%b"trả về giá trị duy nhất (và bên phải) vì không có mã thông báo thứ 2 trong hai dòng đầu tiên. Tất nhiên, có thể giữ lại skip=2như một vấn đề của nguyên tắc chung ...
JosefZ

1
@JosefZ: "trả về giá trị duy nhất (và bên phải) vì không có mã thông báo thứ 2 trong hai dòng đầu tiên" - À đúng, bạn hoàn toàn đúng. Tuy nhiên, tôi thích bỏ qua các dòng không yêu cầu hoàn toàn để không có sự mơ hồ về dòng nào tôi muốn bắt đầu xử lý.
Karan

Điều này hoạt động hoàn hảo. Nhưng vì nó hơi phức tạp để gõ mỗi khi tôi cần nó, tôi quyết định gói lệnh trong một biến môi trường tùy chỉnh : setx syspathdo "for /f \"skip=2 tokens=2*\" %a in ('reg query \"HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\" /v PATH') do @". Bây giờ tôi có thể đơn giản phát hành %syspathdo% echo %b. Mục tiêu cuối cùng của tôi là có thể mở rộng đường dẫn hệ thống trong khi vẫn giữ đường dẫn người dùng luôn ở cuối, bây giờ thật dễ dàng : %syspathdo% setx PATH "%b;C:\some\new\path" /m. Cảm ơn rất nhiều!
tê giác
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.