Làm cách nào tôi có thể nối vĩnh viễn một mục vào biến PATH của hệ thống, thông qua dòng lệnh?


13

Những gì tôi cần làm:

  • Nối một thư mục vào %PATH%biến môi trường ở cấp HỆ THỐNG.
  • Làm cho sự thay đổi vĩnh viễn.

Làm thế nào tôi cần phải làm điều đó:

  • Sử dụng dấu nhắc lệnh hoặc phương thức khác theo đó tất cả các lệnh cần thiết có thể được ghi vào một .BATtệp.
  • Chỉ sử dụng các công cụ có sẵn trên Windows XP SP3, không có kết nối Internet.
  • Tôi muốn chạy tập lệnh cục bộ, nhưng tôi cũng có quyền truy cập từ xa vào các hệ thống đích. Mặc dù vậy, hãy nhớ rằng tôi không thể đoán bất kỳ dịch vụ không mặc định nào (ví dụ: Đăng ký từ xa) được bật trên hệ thống.

Hệ thống kịch bản cần phải làm việc trên:

  • Windows XP SP3
  • Máy chủ Windows 2003 SP2
  • Windows 7 SP1
  • Máy chủ Windows 2008 R2 SP1

Tôi khá quen thuộc với SETlệnh, nhưng tôi cũng biết rằng nó thường sẽ ghi đè lên biến hiện có thay vì nối thêm vào nó. Điều đó không được chấp nhận. Có công cụ nào khác (hoặc tùy chọn SETmà tôi không biết) sẽ thay thế cho biến đó không? Hoặc, tôi có cần đặt một cách giải quyết trong tập lệnh bao gồm việc sao chép tạm thời biến hiện có sang một biến hoặc tệp văn bản khác không?

Ngoài ra, đó là sự hiểu biết của tôi SETsẽ không thay đổi vĩnh viễn biến. Tôi đã thấy đề cập đến SETX, nhưng điều đó dường như không được tích hợp trong Windows XP SP3 (hoặc, ít nhất, nó dường như không có sẵn trên hệ thống tôi đang làm việc). Có cách nào khác để thay đổi vĩnh viễn, thông qua chỉnh sửa sổ đăng ký hay không?

Tôi đã thực hiện một số tìm kiếm xung quanh và đã học được một chút tốt từ đây về việc thiết lập các biến môi trường trong Windows. Tuy nhiên, tôi chưa tìm thấy một câu hỏi trùng lặp chính xác phù hợp với nhu cầu của mình. Nếu có, xin vui lòng cho tôi biết.


Setx không đi kèm với XP. Nó nằm trong một hoặc nhiều bộ tài nguyên, nhưng tôi quên cái nào. Để thực hiện thay đổi biến môi trường vĩnh viễn tại dòng lệnh, đây chắc chắn là cách dễ nhất. Bạn có thể thực hiện thay đổi trong sổ đăng ký (HKEY_LOCAL_MACHINE \ HỆ THỐNG \ CurrentControlset \ Control \ Session Manager \ Môi trường) nhưng các thay đổi đăng ký từ dòng lệnh cũng không phải là một miếng bánh. Nếu tôi là bạn, thì tôi sẽ viết VBScript để làm việc này.
EBGreen

@EBGreen Tôi hơi quen với việc sử dụng REGđể thực hiện thay đổi sổ đăng ký. Nếu bạn muốn đăng câu trả lời đó, với các đề xuất về cách giữ lại đường dẫn hiện tại, ít nhất tôi sẽ cho nó một cuộc bỏ phiếu.
Iszi

1
Tôi nghĩ, theo đề nghị của EBGreen, tôi đã tìm ra cách tôi cần làm điều đó. Bây giờ tôi chỉ muốn có một cách để làm mới registry (và đẩy vào các biến môi trường) mà không cần khởi động lại hoặc tải lại Explorer?
Iszi

1
@EBGreen Vâng, đó là những gì nó trông giống như. Nhân tiện, nếu bạn có thời gian để tìm ra cú pháp, bạn có thể vui lòng gửi câu trả lời thực tế không? Tôi muốn thay vì điều này không biến thành một câu hỏi tự trả lời.
Iszi

1
@lszi, bạn nên trả lời câu hỏi của riêng bạn. Một câu trả lời tốt cho một câu hỏi hay đều có giá trị, ngay cả khi bạn tự trả lời.
Myrddin Emrys

Câu trả lời:


4

Phần sau đây thêm 'C: \ bin' vào đường dẫn của bạn và sau đó lưu đường dẫn mới vào Sổ đăng ký:

set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %path% /f

Tôi chỉ thử nghiệm điều này trên XP SP3, nhưng nó cũng hoạt động trên phiên bản mới hơn.

Tôi đoán một người dùng mới đăng nhập trước khi máy khởi động lại có thể không nhận được đường dẫn mới.

Harry đã đúng với nhận xét của mình về% SystemRoot%, nếu bạn muốn giữ những thứ này, trước tiên bạn cần phải lấy giá trị cũ cho đường dẫn từ sổ đăng ký:

@echo OFF

set KEY_NAME="HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"
set VALUE_NAME=Path

FOR /F "usebackq skip=4 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO (
  set ValueName=%%A
  set ValueValue=%%C
)

if defined ValueName (

  set newPath=%ValueValue%;C:\bin

  reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %newPath% /f

  set path=%path%;C:\bin

) else (
    @echo %KEY_NAME%\%VALUE_NAME% not found.
)

2
Xin lưu ý rằng điều này sẽ thay đổi một số mục PATH hiện có bằng cách mở rộng các tham chiếu biến môi trường. Ví dụ: mục tiêu chuẩn% SystemRoot% \ system32 sẽ được thay thế bằng c: \ windows \ system32. Ví dụ cụ thể này không thành vấn đề vì SystemRoot là một hằng số, nhưng nếu ai đó đã thiết lập PATH với tham chiếu đến biến môi trường sẽ thay đổi bạn sẽ phá vỡ nó. (Tôi làm điều này trên một số máy tính của mình để trỏ đến thư mục bin trong Sun JDK hiện tại.)
Harry Johnston

Tập lệnh mới không hoạt động như được viết nếu đường dẫn chứa dấu ngoặc, ví dụ: mọi tham chiếu đến Tệp chương trình (x86).
Harry Johnston

-1
set path=%path%;C:\bin
reg.exe ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d ^%path^% /f

2
Mặc dù các lệnh trần có thể hữu ích, chúng tôi mong đợi một chút công việc hơn trong các câu hỏi / câu trả lời của chúng tôi. Hãy giải thích làm thế nào điều này trả lời câu hỏi OP.
Ƭᴇcʜιᴇ007
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.