Tại sao biến môi trường PATH của tôi khác với dấu nhắc lệnh?


11

Một chút nền tảng quan trọng: công ty của tôi có tập lệnh VBS đăng nhập chung, điều chỉnh các biến môi trường PATH của người dùng khi đăng nhập và cho phép tôi chạy phần mềm có phụ thuộc vào các tệp tin DFS được ánh xạ. Gần đây tôi cũng đã cài đặt SDK Windows Powershell cho máy Windows 7 Enterprise của mình và đã thử thử sửa đổi biến môi trường PATH của tôi từ dòng lệnh Powershell.

Theo đó, tôi nhận thấy rằng tôi không còn có thể chạy các ứng dụng tương ứng với các sửa đổi PATH đăng nhập này và trình soạn thảo biến môi trường PATH được đặt thành một cái gì đó khác với những gì hiển thị khi tôi đưa ra một 'echo %PATH%'dấu nhắc lệnh.

Vì vậy, ví dụ (đơn giản hóa), từ trình soạn thảo biến môi trường ( My Computer properties -> Advanced System Settings -> Environment Variables) tôi đã có

 C:\MyDir\; C:\MyOtherDir

trong khi đó khi tôi thực hiện 'echo %PATH%'từ một dấu nhắc lệnh thì tôi nhận được:

 C:\MyDir\

Có ai khác có một vấn đề tương tự và đã có một số loại giải quyết? Khi tôi tìm kiếm sự giúp đỡ, tôi đã phát hiện ra điều này:

(Liên quan?) Chủ đề StackOverflow

Tôi nhận ra rằng nếu tập lệnh đăng nhập được khởi tạo bởi một thứ khác ngoài môi trường Explorer.exe của tôi thì đó là vấn đề. Tuy nhiên, khi tôi tự chạy tập lệnh đăng nhập, PATH của tôi từ dấu nhắc lệnh không thay đổi. Điều này sẽ có liên quan gì với PowerShell? Tôi đang thiếu làm thế nào điều này được kết nối với cài đặt đó hoàn toàn.


Làm thế nào bạn sửa đổi đường dẫn trong powershell? Bạn đã lặp lại% PATH% ở đâu? Trong cmd.exe?
Werner Henze

TRẢ LỜI DƯỚI ĐÂY LÀ GENIUS.
SDsolar

Câu trả lời:


11

Windows có hai lớp biến môi trường biến môi trường hệ thốngbiến môi trường người dùng . Nếu bạn đang sử dụng, echo %PATH%bạn sẽ thấy biến môi trường người dùng của bạn PATH. Chỉ khi không có biến người dùng được xác định, biến hệ thống sẽ có hiệu lực đối với các quy trình người dùng.

Dấu PATHphân cách ;không nên được theo sau bởi một khoảng trống.

Lưu ý sau đây của Microsoft có thể hữu ích:

Bạn có thể sửa đổi các biến môi trường người dùng bằng cách chỉnh sửa khóa Registry sau:

   HKEY_CURRENT_USER \ 
         Environment

Bạn có thể sửa đổi các biến môi trường hệ thống bằng cách chỉnh sửa khóa Registry sau:

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

Lưu ý rằng bất kỳ biến môi trường nào cần được mở rộng (ví dụ: khi bạn sử dụng %SYSTEM%) phải được lưu trữ trong sổ đăng ký dưới dạng REG_EXPAND_SZgiá trị đăng ký. Mọi giá trị của loại REG_SZsẽ không được mở rộng khi đọc từ sổ đăng ký.

Nhận xét bổ sung: Bất cứ khi nào một quy trình thay đổi môi trường của nó (thay vì cài đặt đăng ký xác định môi trường cho các quy trình mới), các thay đổi chỉ hiển thị cho các quy trình con.


1
Tôi muốn nhấn mạnh quan điểm của Axel nếu bạn cần sửa đổi Biến môi trường, thì bạn cần thực hiện thay đổi trong sổ đăng ký. Trên thực tế tôi đã tạo ra một hàm PowerShell để trợ giúp việc này: computerperformance.co.uk/powershell/powershell_env_path.htmlm
Guy Thomas

1
Không có giá trị được sửa đổi, chỉ có hai biến tmptemp. Bạn có chắc chắn rằng đây là đường dẫn cho người dùng, cần được sửa đổi?
Johnny_D

Điều này dường như không hoạt động (ít nhất là trước khi khởi động lại, ít nhất). Biến đường dẫn không có trong HKCU \ Môi trường, biến đường dẫn trong cmd.exe hiển thị chính xác, nhưng các ứng dụng đã khởi chạy vẫn thấy biến đường dẫn cũ.
Martin Argerami

@Martin: có, ứng dụng đã khởi chạy không nhận ra các thay đổi đăng ký, vì chúng nhận được bản sao bộ nhớ của môi trường trong quá trình khởi động ứng dụng. Bản sao này phụ thuộc vào quy trình cha bắt đầu các quy trình phụ. Nếu chúng được khởi động từ Windows Explorer, bạn phải khởi động lại Explorer để lấy PATH mới.
Axel Kemper

Bạn đóng đinh nó trên đầu! Đường dẫn trong đó đã thêm một số chương trình mà tôi biết đã bị xóa, chẳng hạn như Microsoft SQL. Tôi biết nó không đến từ đường dẫn thuộc tính hệ thống mà tôi đã đặt. Cảm ơn bạn rất nhiều - từ tương lai - bạn đã đăng câu trả lời này hơn 3 năm trước.
SDsolar
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.