Jest to w rzeczywistości dość proste do naprawienia. Powiedz, że struktura katalogów jest taka:
C:\Dir1\Dir1\Dir1\Dir1…
Aby to naprawić, po prostu zmień nazwę każdego folderu na jednoznakową nazwę folderu, dopóki nie będzie już zbyt długo do usunięcia:
- Zmień nazwę
C:\Dir1
naC:\D
- Nawigować do
C:\D\
- Zmień nazwę
C:\D\Dir1
naC:\D\D
- Nawigować do
C:\D\D\
- Idź 1, aż całkowita długość ścieżki wyniesie <260
Oto plik wsadowy do automatyzacji procesu (ta prosta wersja jest najlepsza dla prostych katalogów takich jak ten opisany w pytaniu, szczególnie dla katalogów jednorazowych). Przekazać ją najwyższą folderu możliwe (na przykład C:\Dir1
na C:\Dir1\Dir1\Dir1…
lub C:\Users\Bob\Desktop\New Folder
za 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
Wyjaśnienie techniczne
Pozostałe proponowane rozwiązania mają charakter wsteczny; nie możesz tego naprawić, idąc od najbardziej wewnętrznego katalogu na zewnątrz, musisz iść w innym kierunku.
Kiedy próbujesz uzyskać dostęp do katalogu, robisz to, używając jego bezwzględnej ścieżki, jawnie lub nie, która obejmuje wszystko, co było przed nim. Dlatego dla takiej struktury katalogów C:\Dir1\Dir1\Dir1\Dir1
długość ścieżki do najbardziej wewnętrznego Dir1
wynosi 22. Jednak długość ścieżki do najbardziej zewnętrznej Dir1
wynosi tylko 7, a zatem jest nadal dostępna niezależnie od jej zawartości (w kontekście ścieżki danego katalogu , system plików nie ma wiedzy o tym, co zawiera ani o wpływie, jaki ma na całkowitą długość ścieżki swoich katalogów potomnych, tylko katalogi przodków - nie można zmienić nazwy katalogu, jeśli całkowita długość ścieżki będzie zbyt długa).
Dlatego gdy napotkasz zbyt długą ścieżkę, musisz przejść na najwyższy możliwy poziom i zmienić nazwę na jednoznakową i powtórzyć dla każdego poziomu na tym poziomie. Za każdym razem, gdy to robisz, całkowita długość ścieżki ulega skróceniu o różnicę między starą nazwą a nową nazwą.
Jest też odwrotnie. Nie można utworzyć ścieżki większej niż maksymalna obsługiwana długość (w systemach DOS i Windows MAX_PATH = 260
). Możesz jednak zmienić nazwy katalogów, od najbardziej wewnętrznego do dłuższego. Powoduje to, że głębsze foldery, których bezwzględna ścieżka wynosi> 260, będą niedostępne. (To nie czyni ich „ukrytymi” ani bezpiecznymi, ponieważ są wystarczająco proste, aby się do nich dostać, więc nie używaj tej metody do ukrywania plików.)
Ciekawa uwaga dodatkowa
Jeśli tworzysz foldery w Eksploratorze Windows 7, może się wydawać, że Eksplorator umożliwia tworzenie podkatalogów w taki sposób, że łączna długość jest dłuższa niż MAX_PATH
w rzeczywistości, ale tak naprawdę oszukuje za pomocą „nazw plików DOS 8.3”. Możesz to zobaczyć, tworząc drzewo, takie jak:
C:\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
\abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\
Ma 696 znaków, co oczywiście jest znacznie dłuższe niż 260. Ponadto, jeśli przejdziesz do najbardziej wewnętrznego podkatalogu w Eksploratorze, wyświetli się on zgodnie z oczekiwaniami na pasku adresu, gdy nie jest aktywny, ale po kliknięciu adresu pasek zmienia ścieżkę na C:\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\ABCDEF~1\
, która ma tylko 102 znaki.
W XP nie robi tego, zamiast tego zdecydowanie odmawia utworzenia dłuższej ścieżki niż jest obsługiwana.
Naprawdę interesujące byłoby dowiedzieć się, jak Eksplorator Windows 7 obsługuje „zbyt długie ścieżki”, gdy NtfsDisable8dot3NameCreation
jest ustawiona ta opcja.