Ini sebenarnya cukup mudah untuk diperbaiki. Katakan bahwa struktur direktori adalah seperti itu:
C:\Dir1\Dir1\Dir1\Dir1…
Untuk memperbaikinya, cukup ganti nama setiap folder menjadi nama folder satu karakter hingga tidak lagi terlalu lama untuk dihapus:
- Ganti nama
C:\Dir1
menjadiC:\D
- Navigasi ke
C:\D\
- Ganti nama
C:\D\Dir1
menjadiC:\D\D
- Navigasi ke
C:\D\D\
- Goto 1 hingga total panjang lintasan <260
Berikut adalah file batch untuk mengotomatiskan proses (versi sederhana ini terbaik untuk direktori sederhana seperti yang dijelaskan dalam pertanyaan, terutama untuk yang sekali pakai). Berikan folder tertinggi yang mungkin (misalnya C:\Dir1
untuk C:\Dir1\Dir1\Dir1…
atau C:\Users\Bob\Desktop\New Folder
untuk 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
Penjelasan Teknis
Solusi yang diusulkan lainnya mundur; Anda tidak dapat memperbaikinya dengan bekerja dengan cara Anda dari direktori paling dalam ke luar, Anda harus pergi ke arah lain.
Ketika Anda mencoba mengakses direktori, Anda melakukannya menggunakan jalur absolutnya apakah secara eksplisit atau tidak, yang mencakup semua yang datang sebelumnya. Oleh karena itu, untuk struktur direktori seperti C:\Dir1\Dir1\Dir1\Dir1
, panjang jalur ke terdalam Dir1
adalah 22. Namun panjang jalur ke terluar Dir1
hanya 7, dan karena itu masih dapat diakses terlepas dari isinya (dalam konteks jalur direktori tertentu yang diberikan , sistem file tidak memiliki pengetahuan tentang apa yang dikandungnya atau efeknya terhadap total panjang path direktori anak-anaknya; hanya direktori leluhurnya - Anda tidak dapat mengganti nama direktori jika total panjang path terlalu panjang).
Oleh karena itu, ketika Anda menemukan jalan yang terlalu panjang, apa yang perlu Anda lakukan adalah pergi ke tingkat tertinggi yang mungkin dan ganti namanya menjadi nama satu karakter dan ulangi untuk setiap tingkat di dalamnya. Setiap kali Anda melakukannya, total panjang jalan lebih pendek dengan perbedaan antara nama lama dan nama baru.
Yang sebaliknya juga benar. Anda tidak dapat membuat jalur yang lebih besar dari panjang maksimum yang didukung (pada DOS dan Windows, MAX_PATH = 260
). Namun, Anda dapat mengubah nama direktori, mulai dari yang paling dalam, menjadi nama yang lebih panjang. Hasilnya adalah folder yang lebih dalam yang jalur absolutnya> 260 tidak dapat diakses. (Itu tidak membuat mereka “tersembunyi” atau aman, karena mereka cukup sederhana untuk mendapatkannya, jadi jangan gunakan metode ini untuk menyembunyikan file.)
Catatan Sisi Menarik
Jika Anda membuat folder di Windows 7 Explorer, sepertinya Explorer memungkinkan Anda membuat subdirektori sedemikian rupa sehingga total panjangnya lebih panjang daripada MAX_PATH
, dan sebenarnya itu adalah penjelmaan, namun sebenarnya curang dengan menggunakan "nama file DOS 8.3". Anda dapat melihat ini dengan membuat pohon seperti berikut:
C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\
Panjangnya 696 karakter, yang tentu saja jauh lebih panjang dari 260. Selanjutnya, jika Anda menavigasi ke subdirektori terdalam di Explorer, itu menunjukkannya seperti yang diharapkan di bilah alamat ketika tidak dalam fokus, tetapi ketika Anda mengklik alamat bar, itu mengubah jalur ke C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\
, yang hanya 102 karakter.
Di XP, ia tidak melakukan ini, sebaliknya ia menolak untuk membuat jalan yang lebih panjang daripada yang didukung.
Apa yang benar-benar menarik adalah untuk mengetahui bagaimana Windows 7 Explorer menangani "path terlalu panjang" ketika NtfsDisable8dot3NameCreation
opsi diatur.