Điều này thực sự khá đơn giản để khắc phục. Nói rằng cấu trúc thư mục là như vậy:
C:\Dir1\Dir1\Dir1\Dir1…
Để sửa nó, chỉ cần đổi tên mỗi thư mục thành tên thư mục một ký tự cho đến khi không còn quá lâu để xóa:
- Đổi tên
C:\Dir1
thànhC:\D
- Hướng đến
C:\D\
- Đổi tên
C:\D\Dir1
thànhC:\D\D
- Hướng đến
C:\D\D\
- Đi 1 cho đến khi tổng chiều dài của đường dẫn <260
Đây là một tệp bó để tự động hóa quy trình (phiên bản đơn giản này là tốt nhất cho các thư mục đơn giản như thư mục được mô tả trong câu hỏi, đặc biệt là cho các tệp dùng một lần). Vượt qua nó thư mục cao nhất có thể (ví dụ C:\Dir1
cho C:\Dir1\Dir1\Dir1…
hoặc C:\Users\Bob\Desktop\New Folder
cho C:\Users\Bob\Desktop\New Folder\abcdefghi…
)
@echo off
if not (%1)==() cd %1
for /D %%i in (*) do if not %%i==_ ren "%%i" _
pushd _
%0
popd
Giải thích kỹ thuật
Các giải pháp đề xuất khác là ngược; bạn không thể sửa nó bằng cách di chuyển từ thư mục trong cùng ra ngoài, bạn cần đi theo hướng khác.
Khi bạn cố gắng truy cập một thư mục, bạn làm như vậy bằng cách sử dụng đường dẫn tuyệt đối của nó cho dù rõ ràng hay không, bao gồm tất cả mọi thứ xuất hiện trước nó. Do đó, đối với cấu trúc thư mục như C:\Dir1\Dir1\Dir1\Dir1
, độ dài của đường dẫn đến trong cùng Dir1
là 22. Tuy nhiên, độ dài của đường dẫn đến ngoài cùng Dir1
chỉ là 7, và do đó vẫn có thể truy cập được bất kể nội dung của nó (trong ngữ cảnh của đường dẫn của thư mục đã cho , hệ thống tệp không có kiến thức về những gì nó chứa hoặc ảnh hưởng của nó đến tổng chiều dài đường dẫn của các thư mục con của nó, chỉ có các thư mục tổ tiên của nó. Bạn không thể đổi tên một thư mục nếu tổng chiều dài đường dẫn sẽ quá dài).
Do đó, khi bạn gặp một con đường quá dài, điều bạn cần làm là đi đến cấp độ cao nhất có thể và đổi tên nó thành tên một ký tự và lặp lại cho mỗi cấp độ trong đó. Mỗi lần bạn làm như vậy, tổng chiều dài của đường dẫn rút ngắn bằng sự khác biệt giữa tên cũ và tên mới.
Điều ngược lại cũng đúng. Bạn không thể tạo đường dẫn lớn hơn độ dài được hỗ trợ tối đa (trên DOS và Windows, MAX_PATH = 260
). Tuy nhiên, bạn có thể đổi tên các thư mục, hoạt động từ bên ngoài trong cùng, thành một tên dài hơn. Kết quả là các thư mục sâu hơn có đường dẫn tuyệt đối> 260 sẽ không thể truy cập được. (Điều đó không làm cho chúng bị ẩn hoặc bảo mật, vì chúng đủ đơn giản để truy cập, vì vậy đừng sử dụng phương pháp này để ẩn các tệp.)
Lưu ý bên thú vị
Nếu bạn tạo các thư mục trong Windows 7 Explorer, có vẻ như Explorer cho phép bạn tạo các thư mục con sao cho tổng chiều dài dài hơn MAX_PATH
và thực tế là nó bị lừa bằng cách sử dụng tên tệp DOS DOS 8.3. Bạn có thể thấy điều này bằng cách tạo một cây như sau:
C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\
Nó dài 696 ký tự, tất nhiên dài hơn 260. Hơn nữa, nếu bạn điều hướng đến thư mục con trong cùng trong Explorer, nó sẽ hiển thị như mong đợi trong thanh địa chỉ khi không nằm trong tiêu điểm, nhưng khi bạn nhấp vào địa chỉ thanh, nó thay đổi đường dẫn đến C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\
, chỉ dài 102 ký tự.
Trong XP, nó không làm điều này, thay vào đó nó kiên quyết từ chối tạo một đường dẫn dài hơn mức được hỗ trợ.
Điều thực sự thú vị là tìm hiểu cách Windows 7 Explorer xử lý các đường dẫn quá dài của hồi giáo khi NtfsDisable8dot3NameCreation
tùy chọn được đặt.