Làm cách nào để bỏ qua các hạn chế về độ dài của biến PATH


9

thông báo lỗi

Thuộc tính hệ thống

Biến môi trường này quá lớn. Hộp thoại này cho phép thiết lập các giá trị dài tối đa 2047 ký tự.

Tôi đã sử dụng / đã sử dụng rất nhiều phần mềm và kết quả là PATH của tôi đã phát triển. Khi tôi cố gắng thêm đường dẫn mới, tôi nhận được thông báo trên. Như một giải pháp thay thế, tôi đang chỉnh sửa đường dẫn người dùng của mình, nhưng không muốn.


Trong các bài đăng trong tương lai, vui lòng thêm văn bản của thông báo lỗi mà tôi cho rằng bạn đã tìm kiếm để xác nhận câu hỏi không được hỏi trước đó ;-) Thông thường, chỉ cần nhấn Ctrl + C trong hộp thoại như vậy sẽ sao chép nó cho bạn.
Arjan

Có lẽ hỏi về các đề xuất phần mềm cho một tiện ích để phát hiện các mục và mục trùng lặp mà thư mục không tồn tại (trình gỡ cài đặt rất tệ khi cập nhật đường dẫn). Điều này sẽ không quan trọng đối với mã dưới dạng tập lệnh Python.
Mawg

Câu trả lời:


8

Tài liệu của Microsoft nói rằng một biến môi trường trên Windows chỉ giới hạn ở 32.767 ký tự ( liên kết ), nhưng không cho biết cách tạo biến dài như vậy.

Vấn đề ở đây là các công cụ mà Windows cung cấp đều có giới hạn của chúng:

  • Các lệnh set và setx cắt ngắn các giá trị thành 1023 ký tự.

  • Thiết lập trực tiếp trong sổ đăng ký HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment không thành công do regedit cắt ngắn chuỗi nhập sau 2047 ký tự.

Vì vậy, bạn phải sử dụng cách giải quyết.

Sử dụng tên thư mục ngắn

Bạn có thể thấy tên như vậy bằng cách sử dụng dir /x /ad. Ví dụ sau đây cho thấy rằng trên máy tính của tôi, thư mục Program Files (x86) có thể được thay thế bằng PROGRA~2:

nhập mô tả hình ảnh ở đây

Sử dụng các biến môi trường nhúng

Nếu bạn có:

C:\this_is_a\long_path\that_appears\in_multiple_places\subdir1
C:\this_is_a\long_path\that_appears\in_multiple_places\subdir2

sau đó bạn có thể tạo một biến môi trường mới, chẳng hạn như:

SET P1=C:\this_is_a\long_path\that_appears\in_multiple_places

sau đó đường dẫn ban đầu của bạn trở thành

%P1%\subdir1
%P1%\subdir2

Bạn cũng có thể chia PATH thành hai bằng cách tạo một biến mới, giả sử NEWPATH, chứa các đường dẫn thừa và nối ;%NEWPATH%vào biến PATH.

Tránh sử dụng lệnh setx vì nó sẽ trực tiếp giải quyết các biến môi trường được nhúng và chuỗi kết quả sẽ một lần nữa quá dài.

Sử dụng tập lệnh PowerShell để đặt PATH

PowerShell gọi API Windows trực tiếp và do đó có thể đạt đến giới hạn lý thuyết là 32.767 ký tự cho một biến môi trường.

Kịch bản có thể chứa các lệnh như:

[Environment]::SetEnvironmentVariable("Path", $longpath, "Machine")

3
Cảm ơn rât nhiều. Trong số này, tùy chọn% NEWPATH% là ngon nhất, vì vậy tôi nghĩ rằng tôi sẽ làm theo.
Tobi Alafin

Việc chia thành nhiều vars env, chẳng hạn như %NEWPATH%, cũng cho phép tôi lồng các vars env khác vào %NEWPATH%(mở rộng chuỗi tôi đoán xảy ra ở mỗi cấp độ lồng nhau - chưa thử nghiệm xem điều gì xảy ra trong một vòng tham chiếu vô hạn ..)
Coruscate5

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.