Jak usunąć plik o długości ścieżki większej niż 260 znaków

Nie jest tajemnicą, że Eksplorator Windows, podobnie jak większość innych aplikacji Windows, w tym PowerShell, nie może współpracować z obiektami systemu plików z głębokim zagnieżdżaniem folderów., długość ścieżki przekraczająca 260 znaków. Co więcej, ograniczenie to istnieje tylko na poziomie aplikacji, a sam system plików NTFS obsługuje ścieżki plików do 32767 postacie.


To ograniczenie jest nakładane przez bibliotekę. Win32 API, o maksymalnej długości ścieżki 260 znaków (MAX_PATH = 260) Ogólnie ścieżka składa się z następujących elementów:  [C: \] + [ścieżka_256_ znaków] + [], a maksymalna długość jednego katalogu / pliku w NTFS wynosi 255 znaków w Unicode. Podczas korzystania z funkcji interfejsu API Unicode można użyć ścieżki do 32767 postacie. Z tego powodu wiele programów innych firm (na przykład te same popularne menedżery plików) Daleko i Całkowity dowódca) bezproblemowo przetwarza pliki / foldery, których długość ścieżki przekracza 260 znaków.

Wskazówka. Można obejść to ograniczenie interfejsu API Win32 i pracować z długimi nazwami plików, używając formatu UNC ścieżki, wskazując bezwzględną ścieżkę do pliku za pomocą prefiksu ścieżki o rozszerzonej długości \\? \. Na przykład więc \\? \ C: \ SomeLongPath \ LongNameFile.txt

Ograniczenie to nie dotyczy również dostępu użytkowników do sieci za pośrednictwem protokołu SMB (z tego powodu struktury katalogów z długimi ścieżkami nie są rzadkie na serwerach plików z danymi użytkownika). Administrator obsługujący ten serwer nie może zarządzać (usuwać / przenosić) plikami długimi ścieżkami za pośrednictwem standardowego interfejsu eksploratora Windows Explorer. Podczas próby utworzenia / skopiowania pliku do takiego katalogu pojawia się błąd:

Zbyt długa ścieżka docelowa. Nazwy plików byłyby zbyt długie dla folderu docelowego. Możesz skrócić nazwę pliku i spróbować ponownie lub wypróbować lokalizację o skróconej ścieżce

Inne programy / okna dialogowe mogą wskazywać ograniczenie na swój własny sposób..

To zabawne, że rok 2014 jest poza oknem i wciąż mówimy o limicie 260 znaków dla maksymalnej długości ścieżki w systemie Windows ... Wydaje się jednak, że nie oczekuje się żadnych poważnych zmian w najbliższej przyszłości, a nawet w całkowicie świeżym Windows 10 Technical Preview to ograniczenie wciąż istnieje.

W tym artykule pokażemy, jak w systemie Windows możesz pracować z plikami, których ścieżka przekracza 260 znaków. W takim przypadku naszym zadaniem jest usunięcie katalogu zawierającego pliki o długiej ścieżce.

Podczas próby usunięcia takiego katalogu z Eksploratora pojawia się błąd:

Nazwy plików byłyby zbyt długie dla folderu docelowego. Możesz skrócić nazwę pliku i spróbować ponownie lub wypróbować lokalizację o skróconej ścieżce.

Program Powershell również nie obsługuje poprawnie katalogów i plików o dużych ścieżkach przekraczających 260 znaków. Podczas próby usunięcia katalogu z takimi plikami (C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath) pojawia się błąd:

Usuń element. \ Verylongpath -Recurse

Usuń element: określona ścieżka, nazwa pliku lub oba są za długie. Pełna nazwa pliku musi być mniejsza niż 260
znaków, a nazwa katalogu musi mieć mniej niż 248 znaków.
W linii: 1 znak: 1
+ Usuń element. \ Verylongpath -Recurse
+ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
+ CategoryInfo: WriteError: (C: \ Install \ MS S ... it \ verylongpath: String) [Remove-Item], PathTooLongExcepti
na
+ FullyQualifiedErrorId: RemoveItemIOError, Microsoft.PowerShell.Commands.RemoveItemCommand

Najprostszą opcją (która w rzeczywistości jest sugerowana w oknie błędu) jest skrócenie nazwy folderów nadrzędnych, skrócenie całkowitej długości ścieżki (ale nie zawsze dotyczy).

Inną opcją jest utworzenie dowiązania symbolicznego do części ścieżki, tym samym skracając całkowitą długość ścieżki:

mklink / d c: \ install \ link „C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath”

Następnie należy wykonać operacje na plikach w katalogu, do którego przypisane jest dowiązanie symboliczne..

Inną opcją, która przypomina pracę z dowiązaniem symbolicznym, jest mapowanie folderu problemów na dysk wirtualny (w naszym przykładzie X :), a tym samym zmniejszenie długości ścieżki:

Subst X: „C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath”

Teraz możesz pracować z danymi na dysku X:, w których ścieżki plików nie przekroczą limitu. Po zakończeniu pracy możesz usunąć dysk wirtualny:

Podstawnik X: / d

Ale osobiście najbardziej lubię w usuwaniu danych w takich sytuacjach to możliwości robocopy.exe, który obsługuje długie ścieżki.

Korzystanie z opcji / MIR, narzędzie robocopy może utworzyć pełną kopię (kopię lustrzaną) katalogu źródłowego w celu. A jeśli folder źródłowy jest pusty, wszystkie dane w folderze docelowym również zostaną wyczyszczone. Utwórz pusty folder C: \ Install \ test i za pomocą argumentu / MIR skopiuj zawartość folderu testowego do folderu docelowego (jeśli nazwa folderu zawiera spacje lub znaki cyrylicy, ścieżka musi być ujęta w cudzysłów).

robocopy / MIR C: \ Install \ test "C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath"

Po wykonaniu polecenia zawartość katalogu C: \ Install \ MS SQL 2012 Express Edition 64 bit \ verylongpath zostaje wyczyszczona (zastąpiona zawartością pustego katalogu).

Dzisiaj pokazaliśmy kilka prostych sztuczek, których można użyć podczas pracy z folderami na serwerach plików zawierających foldery, których długość ścieżki przekracza limit 260 znaków.