Khắc phục hạn chế độ dài đường dẫn tệp tối đa trong Windows


36

Một trong những khách hàng của chúng tôi thường sử dụng tên đường dẫn rất dài (một số thư mục lồng nhau, có tên dài) và chúng tôi thường xuyên gặp phải "các vấn đề giáo dục người dùng" để rút ngắn đường dẫn xuống dưới 260 ký tự.

Có một giải pháp kỹ thuật khả dụng không, chúng ta có thể bật một số loại công tắc trong Windows 7 và Windows 2008 R2 để nói "vâng, bỏ qua những vấn đề lịch sử này và làm cho tên đường dẫn +260 hoạt động".

PS Tôi đã đọc và hoàn toàn chưa được xác minh bằng cách đặt tên tệp, đường dẫn và không gian tên


3
Chúng tôi đang ở đây vào năm 2018 và vấn đề vẫn còn tồn tại trong ROBOCOPY. Giới hạn 255. Những người vượt quá nó chỉ đơn giản là tiếng bíp nhưng không sao chép.
SDsolar

@SDsolar: bạn có đang sử dụng phiên bản cũ của robocopy không?
Naikrovek

Vâng, cũng sẽ nói như vậy - người ta phải sử dụng bản sao cụ thể bởi vì nó có thể xử lý các con đường dài ...
Rob Nicholson

Câu trả lời:


12

Các phương thức là có, nhưng cho đến khi Microsoft mã hóa lại tiện ích trình duyệt tệp, chúng tôi gặp khá nhiều vấn đề cũ. Đó là tối ưu phụ, nhưng đó chỉ là cách nó hoạt động.


5
Lỗi trong phần mềm MS đã được trộn lẫn trong một số bản phát hành HĐH, đó là một bản mới ...
Hubert Kario

2
Windows 10 1607 cuối cùng đã khắc phục vấn đề tập tin trình duyệt và có một số ma thuật để đánh lừa các ứng dụng Win32 trong để làm việc trong thế giới này mới kỳ lạ của con đường lớn: howtogeek.com/266621/...
HackSlash

28

Chỉ cần đề cập đến một mẹo tôi chưa thấy đề cập ở đây.

Lấy tập tin này làm ví dụ:

C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

Đường dẫn tập tin đầy đủ này dài 290 ký tự. Shell (Windows Explorer) và hầu hết các tiện ích dòng lệnh có thể sẽ không cho phép bạn chạm vào nó.

Sử dụng substlệnh như vậy:

subst X: "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow"

Bây giờ bạn có thể truy cập (và xóa, di chuyển, v.v.) tệp như vậy:

X:\Still Going\I will run out of ideas soon\I have organizational problems\Obsessive compulsive subdirectory disorder\Here is a guid for no good reason\936DA01F-9ABD-4d9d-80C7-02AF85C822A8\Almost there\Tax Returns\2013\2013_tax_return.pdf

Và bây giờ tên tệp chỉ có ~ 235 ký tự hoặc hơn, do đó bạn sẽ không gặp phải vấn đề "Tên tệp quá dài" nữa.

Trong API Windows, có một hằng số khét tiếng được gọi là MAX_PATH. MAX_PATH là 260 ký tự. Hệ thống tệp NTFS thực sự hỗ trợ đường dẫn tệp lên tới 32.767 ký tự. Và bạn vẫn có thể sử dụng tên đường dẫn dài 32.767 ký tự bằng cách truy cập các phiên bản Unicode (hoặc "rộng") của các hàm Windows API và cũng bằng cách thêm tiền tố vào đường dẫn \\?\.

MAX_PATHđã được thiết lập từ rất lâu trước đây trong thế giới Windows. Tôi nghĩ rằng nó có liên quan đến các tiêu chuẩn ANSI vào thời điểm đó ... nhưng đó là một trong những điều rất khó để Microsoft thay đổi, vì hiện tại chúng tôi có hàng ngàn chương trình và ứng dụng, bao gồm cả một số được viết bởi chính Microsoft, sử dụng MAX_PATHvà sẽ thất bại theo những cách mới lạ nếu hằng số đột ngột thay đổi. (Bộ đệm tràn, tham nhũng đống, v.v.)


9
Tôi đã thực hiện một cách tiếp cận tương tự substbằng cách sử dụng các mối nối thư mục, có thể thuận tiện hơn để dọn dẹp nếu bạn chỉ muốn thực hiện một vài thay đổi nhanh chóng. Tôi sử dụng Link Shell Extension , nhưng bạn chỉ có thể sử dụng mklinklệnh như vậy : mklink /J C:\Wow "C:\Folder1\Really Long Path\Such Recursion\So Deep\Wow".
Charles Grunwald

10

Bạn có thể vượt qua giới hạn này bằng cách sử dụng ký hiệu \\? \ C :. Nó xấu, nhưng nó hỗ trợ độ dài tệp lên tới 2 ^ 15.

http://msdn.microsoft.com/en-us/l Library / aa365247 (v = vs85) .aspx # maxpath


2
Vâng tôi đã đọc nó, như tôi đã nói (xem liên kết của tôi). Nhưng làm thế nào để tôi hưởng lợi chính xác từ nó? Tôi có thể ánh xạ một ổ đĩa tới \? \ Chẳng hạn. Tôi không hiểu Bài viết dành cho lập trình viên sử dụng API windows. Trong khi tôi viết mã bằng .NET khi có nhu cầu, tôi không sử dụng C ++, v.v. và không thể thấy điều này có liên quan như thế nào đối với nhân viên khách hàng của tôi, những người đang sử dụng windows explorer và hộp thoại tệp chung, v.v.
Christopher Edwards

1
Cuối cùng, không có. :-/ Thật đáng buồn.
Chris K

@ChristopherEdwards Bạn có thể tạo các mối nối đến các điểm thấp hơn trong hệ thống phân cấp thư mục.
Hubert Kario

1
@ChristopherEdwards bạn có thể tạo một liên kết c:\usr-datađến `c: \ Users \ VeryLongUserName \ LongFolderName` và bảo anh ta sử dụng cái trước, nhưng nếu anh ta thường đặt tên các thư mục theo 40 ký tự thì điều này sẽ không giúp ích gì ...
Hubert Kario

2
7-zip sẽ vui vẻ duyệt và sao chép trong \? \ C: ký hiệu, với giá trị của nó.
Matt Lyons

9

Microsoft hiện đã có bản sửa lỗi có sẵn cho sự khởi đầu này với Windows 10, được giải thích trong bài viết Đặt tên tệp, đường dẫn và không gian tên MSDN.

darthcoder đã được trả lời với các chi tiết về \\?\C:công việc ký hiệu, nhưng giờ đây đã có một khóa đăng ký HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)để có thể sử dụng để loại bỏ các giới hạn MAX_PATH cho một hệ thống. Bài viết cũng đề cập đến hỗ trợ cho việc kiểm soát Chính sách nhóm tại Computer Configuration > Administrative Templates > System > Filesystem > Enable NTFS long pathscho tổ chức hoặc triển khai toàn nhóm nếu cần.


Tôi chưa có thời gian để kiểm tra kỹ lưỡng, nhưng tôi đã thấy kết quả hỗn hợp với giải pháp này cho đến nay và không thể xác nhận rằng điều này giải quyết vấn đề cho Windows [file] Explorer.
JimNim

2
Điều này không hoạt động trong File Explorer vì mặc dù hệ thống và NTFS có thể xử lý các đường dẫn dài, Explorer không thể cho đến khi chính nó được mã hóa lại.
ingyhere

PS, bạn sẽ cần sử dụng một trong các chương trình sao chép trong liên kết SO này trên Explorer để thực sự làm cho nó hoạt động.
ingyhere

1
Thông tin tốt! Tôi có lẽ sẽ chỉ dính vào Robocopy trong trường hợp đó.
JimNim
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.