2009-12-03 19:23:09 +0000 2009-12-03 19:23:09 +0000
387
387

Jak usunąć katalogi o ścieżkach/nazwach zbyt długich na normalne usunięcie

Wydaje się, że Windows ma limit długości nazw plików przy próbie usunięcia, choć nie przeszkadza to w tworzeniu tych plików.

Nasz proces budowania tworzy wiele plików tymczasowych (wiele zbudowanych z WSDL), które działają poniżej tego limitu. Nasz skrypt ant jest w jakiś sposób w stanie je skasować podczas robienia “clean”, ale czasami muszę skasować katalog workarea (gdzie trafiają wszystkie pliki tymczasowe) bez faktycznego robienia pełnego “clean” z mrówki.

To są te same błędy to pytanie , ale odpowiedzi tam nie działają dla mnie tak naprawdę, ponieważ mam do czynienia z katalogiem, a nie z plikiem, i nie zawsze wiem jakie konkretne pliki lub podkatalogi są przyczyną problemu. I staram się unikać jakichkolwiek ręcznych procesów (innych niż wywołanie pojedynczego polecenia), aby faktycznie je usunąć.

Jeśli spróbuję usunąć katalog z Eksploratora, otrzymam błąd

Cannot delete [file name]: The file name you specified is not valid or too long.  
Specify a different file name

Próba Remove-Item w programie powershell daje następujący błąd:

Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item <<<< -force -Recurse <directory>

Czy ktoś zna jakieś narzędzia lub łatwe sposoby obejścia tego błędu usunięcia bez konieczności ręcznego wyszukiwania problematycznych plików i przenoszenia/nazywania ich?

Odpowiedzi (23)

432
432
432
2009-12-03 19:48:56 +0000

Użyj 7-Zip Menedżera plików, aby je usunąć.

Jeśli nadal masz problemy, upewnij się, że używasz Shift+Delete wewnątrz 7-Zip File Manager. W przeciwnym razie, Windows będzie próbował przenieść je do Kosza (co znowu nie powiedzie się).

311
311
311
2014-07-04 06:23:55 +0000

Żadna z innych (darmowych) odpowiedzi tutaj nie działała dla mnie, ale znalazłem jedną na innej stronie:

rimraf <dir>

rimraf jest pakietem Node.js , więc trzeba będzie zainstalować Node.js, który zawiera npm . Następnie można uruchomić:

npm install -g rimraf

Następnie można uruchomić rimraf z linii poleceń.

Znalazłem to rozwiązanie ponieważ npm sam spowodował ten problem ze względu na sposób zagnieżdżania zależności.

Przy okazji, rimraf otrzymuje swoją nazwę od komendy UNIX-owej rm -rf, która rekurencyjnie usuwa pliki i foldery.

155
155
155
2016-03-03 16:45:54 +0000

Nie ma potrzeby instalowania żadnego programu** do rozwiązania tego problemu.

Ten problem jest łatwo rozwiązany za pomocą robocopy, preinstalowanego od czasu uruchomienia Windows Vista w 2006 roku.

Na przykład, w niektórych przypadkach zgłoszono awarię rmdir /S /Q <dir>. Nie ma potrzeby używania programu 7zip ani żadnego innego narzędzia innych firm. Powershell to overkill. Cygwin może działać, ale możesz nie mieć go zainstalowanego. Skoncentrujmy się więc na robocopy

Pomysł jest następujący:

  1. użyj robocopy do skopiowania+aktualizacja
  2. z nowego pustego folderu
  3. do folderu, który chcesz usunąć, docelowego.

Po wykonaniu robocopy, katalog docelowy również będzie pusty.

Instrukcje te są dla linii poleceń. Po prostu otwórz wyszukiwanie w systemie Windows, wpisz cmd i naciśnij Enter.

Powiedzmy, że cel do usunięcia to:

C:\delete\this folder\with a very long name

Postępujemy w następujący sposób:

  1. Najpierw tworzymy pusty katalog, f.i. C:\emptyfolder.

  2. Copy+update from the empty directory to the target, using the option /purge

  3. Usuń pusty katalog. Nie jest już potrzebny.

Ponieważ w katalogu źródłowym (C:\emptyfolder) nie ma żadnych plików ani folderów, po prostu kasuje rekurencyjnie pliki i foldery pod katalogiem docelowym (C:\delete\this folder\with a very long name)!

  • Ostatni trik: możesz uniknąć pisania ręcznego

Uważaj : Usunięte pliki nie trafią do folderu kosza! Raz usunięte pliki nie mogą być odzyskane.

(Taken from “Path too long? Use Robocopy” by BVLANGEN )

PS: Zdaję sobie sprawę, że ta odpowiedź była tutaj, mniej dydaktyczna. [Jak usunąć plik w Windows o zbyt długiej nazwie?] [duplikat]]](https://superuser.com/a/467814/43193) Benoit dodał:

Być może będziesz musiał przejść przez ten proces więcej niż raz, aby pozbyć się wszystkich plików.

86
86
86
2009-12-03 19:24:08 +0000

Chyba znalazłem sposób na usunięcie rzeczy z cmd. Początkowo próbowałem użyć komendy del, ale to nie zadziałało. Potem przypomniałem sobie rmdir. Robiąc to:

rmdir /S /Q <dir>

wydaje się, że zadziałało.

30
30
30
2014-11-25 20:22:32 +0000

Narzędziem, którego użyłem, gdy miałem ten problem, było FastCopy . Wybrałem z listy rozwijanej Delete All, wybrałem katalog, który chciałem usunąć, i kliknąłem Delete All.

FastCopy jest przenośny (nie wymaga instalacji), a dostępne są wersje 32-bitowe i 64-bitowe.

26
26
26
2014-09-26 19:40:05 +0000

Cygwin’s rm -rf działa dobrze na długich drogach!

26
26
26
2014-10-28 06:09:34 +0000

Bez instalacji dodatkowego oprogramowania możesz użyć komendy subst do tymczasowego utworzenia aliasu do katalogu o długiej nazwie.

np. Jeśli chcesz usunąć folder C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted możesz użyć komendy

subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"

, a następnie możesz usunąć X:\folder to be deleted w Eksploratorze Windows lub w wierszu poleceń. Aby usunąć tymczasowy alias liter dysku, użyj polecenia

subst x: /d
22
22
22
2011-04-22 16:00:01 +0000

Po prostu zejdź z Powershella do dowództwa, biegnąc poniżej:

Cmd /C "rmdir /S /Q <dir>"
18
18
18
2015-06-25 14:19:53 +0000

Rozwiązanie Dentrasi'ego jest tym, co dla mnie najlepsze, ale chciałem umieścić konkretne kroki w odpowiedzi na najwyższym poziomie.

  1. Pobierz i zainstaluj najnowszą stabilną konstrukcję 7zip .
  2. Uruchom 7zip File Manager ( 7zfm.exe ).
  3. W Menedżerze plików 7zip, przejdź do nawigacji, aby zobaczyć nazwę folderu, który chcesz usunąć (tzn. jesteś w folderze nadrzędnym).
  4. Przytrzymaj wciśnięty przycisk Shift.
  5. Kliknij przycisk “Delete”, albo na klawiaturze, albo na pasku narzędzi Menedżera plików 7zip; ** upewnij się, że nadal trzymasz wciśnięty przycisk Shift**.
  6. Kliknij przycisk “OK”; ** upewnij się, że nadal trzymasz wciśnięty klawisz Shift**.
12
12
12
2016-09-09 10:52:17 +0000

Są dwie rzeczy, o których nie wspomniano w istniejących odpowiedziach.

  1. Możesz użyć prefiksu ścieżki o zwiększonej długości, aby uzyskać dostęp do długich ścieżek
  2. W Windows 10 możesz włączyć obsługę długich ścieżek do ogólnego użytku - zauważ jednak, że nie wszystkie aplikacje będą działać z długimi ścieżkami, powinieneś przetestować starsze oprogramowanie. Tylko oprogramowanie z odpowiednim wpisem manifestu będzie mogło z tego skorzystać.

Long Path Prefix

API Windows posiada specjalną funkcję, która obsługuje nazwy ścieżek Unicode o długości do 32k znaków (każdy element ma długość do 255 znaków).

Jest to często mylnie nazywane nazewnictwem UNC, ale nie jest ono powiązane.

Prefiksem używanym przez API do określania długich ścieżek Unicode jest `\?Są dwie rzeczy, o których nie wspomniano w istniejących odpowiedziach.

  1. Możesz użyć prefiksu ścieżki o zwiększonej długości, aby uzyskać dostęp do długich ścieżek
  2. W Windows 10 możesz włączyć obsługę długich ścieżek do ogólnego użytku - zauważ jednak, że nie wszystkie aplikacje będą działać z długimi ścieżkami, powinieneś przetestować starsze oprogramowanie. Tylko oprogramowanie z odpowiednim wpisem manifestu będzie mogło z tego skorzystać.

Long Path Prefix

API Windows posiada specjalną funkcję, która obsługuje nazwy ścieżek Unicode o długości do 32k znaków (każdy element ma długość do 255 znaków).

Jest to często mylnie nazywane nazewnictwem UNC, ale nie jest ono powiązane.

Prefiksem używanym przez API do określania długich ścieżek Unicode jest , jak w:

\?\D:\very long path

Nazwy UNC są zwykle używane w odniesieniu do ścieżek na zdalnych serwerach w postaci \servername\path name\file name. Możesz połączyć to z prefiksem długiej ścieżki, więc: \?\UNC\server\share

Zauważ, że niektóre, słabo napisane, ale niestety dość powszechne, aplikacje nie obsługują ścieżek plików UNC ani prefiksu długiej ścieżki.

Odwołanie: https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath

Obsługa długich ścieżek

Jest to opcja, która została dodana do ostatnich wersji Windows 10. Nie jest ona domyślnie włączona w momencie pisania, ponieważ wymaga specyficznej obsługi aplikacji. Co ciekawe, PowerShell ma wbudowaną obsługę, więc włączenie tej opcji pozwoli na korzystanie z długich ścieżek bezpośrednio w skryptach PowerShella.

Możesz ją aktywować poprzez edytor zasad grupy, jeśli posiadasz wersję Windows z tą opcją. Można też po prostu skorzystać z następującej zmiany w rejestrze. Jak zawsze, przed dokonaniem jakiejkolwiek zmiany należy utworzyć kopię zapasową sekcji rejestru, którą się zmienia.

  1. Uruchom regedit.exe.
  2. Potwierdź komunikat UAC.
  3. Przejdź do klucza: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  4. Utwórz lub zmień klucz LongPathsEnabled.
  5. Jeśli nie istnieje, kliknij prawym przyciskiem myszy na Policje oraz wybierz z menu polecenie Nowe >Dword (32-bitowe).
  6. Ustaw LongPathsEnabled na 1 aby włączyć.

Wszelkie aplikacje z odpowiednimi manifestami będą miały dostęp do standardowych długich ścieżek POSIX. Powinno to obejmować aplikacje Windows Store.

Referencje: https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/

UPDATE 2017-04-09

@maoizm zwrócił uwagę na problem z kluczem rejestru powyżej więc zrobiłem some more digging . Wygląda na to, że można teraz ustawić obsługę długich nazw plików za pomocą klawisza systemowego:

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)

Nadal działa to tylko dla aplikacji, które są jednak specjalnie ustawione do jej używania (wymaga wpisu w manifest.xml aplikacji).

Należy również zauważyć, że nie można używać nazw ścieżek względnych przy użyciu tej metody.

8
8
8
2014-10-28 05:52:15 +0000

Podoba mi się roztwór cmd. Chociaż chcę podzielić się innym obejściem, które działa nawet w samym Explorerze: spróbuj skrócić nazwy folderów nadrzędnych przed usunięciem: krótsze nazwy skrócą ścieżkę. Powiedzmy, że masz taką strukturę drzewa folderów:

C:\

… Projekty

… … Some Awesome Project during spring 2014

… … Some Activity in the park in the city a friday

… … … Bla bla bla bla bla bla bla bla bla

… … … … Faktyczne pliki o długich nazwach

W tym przypadku nie możesz usunąć folderów, nie możesz też usunąć ani zmienić ich nazw. Jeśli chcesz usunąć całą strukturę folderów lub jej część, możesz tymczasowo zmienić nazwy folderów nadrzędnych i skrócić ścieżkę, a następnie usunąć folder. Nazwy mogą być tylko literami:

C:\

… Projekty

… … x

… … y

… … z

… … … … … Faktyczne pliki o długich nazwach, również

W moim przypadku chciałem po prostu usunąć cały folder z wieloma podfolderami i plikami. Więc nie obchodziły mnie nazwy folderów.

7
7
7
2016-01-11 14:22:54 +0000

Rozwiązanie 7-zip działa świetnie. Inną opcją, jeśli masz zainstalowany git, jest otwarcie powłoki bash i użycie:

rm -f

(lub rm -rf dla folderów)

4
4
4
2014-04-29 15:47:23 +0000

Proponuję Total Commander (shareware, ale pracuje po okresie próbnym z minimalnym ekranem startowym naga). W ten sposób zawsze rozwiązuję problemy do długiej nazwy pliku.

2
2
2
2015-02-08 21:07:55 +0000

Stworzyłem prosty program java, który używa robokopii do usuwania plików. Słoik jest uruchomiony. Dla dodatkowego wyjścia uruchom go z linii cmd. https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing

2
2
2
2010-11-06 16:24:27 +0000

Możesz również usunąć je używając ich równoważnej krótkiej nazwy. dir /x pokaże Ci je.

1
1
1
2013-12-20 06:10:00 +0000

Próbowałem wszystkich innych odpowiedzi, ale nie zadziałały (przynajmniej dla mnie).

Natrafiłem na delinfile i zadziałało całkiem nieźle i dość szybko!

Jest to próba ograniczona do 3 akcji / 15 dni, ale jest użyteczna, jeśli chcesz usunąć tylko kilka folderów/plików:

1
1
1
2017-10-28 00:35:26 +0000

Mam tu idealną odpowiedź (na pliki). Działa w systemie Windows 10.

REM Make sure there is no \ at the end of either path!
robocopy "C:\...\...\...\long\path" "C:\DeleteMe" "FileName" /MOV
REM Note: this ^ can be called many times before...:

REM Finally, recursively delete the higher up DeleteMe directory.
rmdir /S /Q DeleteMe

Zobacz również: https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath

Ani jedna alternatywna odpowiedź w 4 pytaniach nie była wystarczająca dla moich potrzeb. Jesteś mile widziany w świecie.

1
1
1
2017-01-09 12:08:22 +0000

Bigger Directories jest również przeznaczony do tego zadania.

  • Download
  • Używa rekurencyjnego wywołania z RemoveDirectoryW do usunięcia istniejących katalogów
  • Używa własnego repozytorium plików dla nowo utworzonych katalogów
  • Pliki mogą być przeniesione z katalogów przed usunięciem stykających się katalogów.
  • Szybkie, choć przejście na górę katalogu jest kliknięciem na zagnieżdżony katalog
  • Windows XP(SP3) i w górę
  • Nieodpisany, niezarządzany kod bez instalatora, więc możliwe ostrzeżenie Smartscreen podczas uruchamiania z zapasowego katalogu np. pulpitu.

Więcej informacji na stronie CodeProject .

1
1
1
2017-06-13 07:52:13 +0000

Zmierzyłem się z tym problemem w Windows 10 i znalazłem to proste rozwiązanie.

  1. Wejdź trochę głębiej do swojego drzewa folderów.
  2. Przeciągnij i upuść folder z dowolnego miejsca na środku drzewa do dowolnego jego początku za pomocą paska adresu.
  3. Tak jak na moim obrazku, przeciągnij i upuść czerwoną skrzynkę na zieloną. (w tym przypadku ścieżka jest krótsza, ale dla długich ścieżek również działa)
  4. Następnie Twoja ścieżka zostanie skrócona i usunięta jak zwykle za pomocą klawisza delete.

0
0
0
2015-06-25 16:47:36 +0000

W końcu dowiedziałem się, jak to zrobić przez Powershell. Poniżej znajdują się instrukcje, których przestrzegałem w celu uruchomienia tego systemu na Windows 7:

  1. Stwórz nowy folder o nazwie NTFSSecurity w folderze C:\Użytkownicy\XXXX\Dokumenty\WindowsPowerShell\Moduły\NTFSSecurity, gdzie XXXX to twoja nazwa użytkownika Windows. Przykład: gdyby moja nazwa użytkownika brzmiała “aspnyc”, nowym folderem byłby C:\Użytkownicy\aspnyc\Dokumenty\WindowsPowerShell\Moduły\NTFSSecurity .

  2. Pobierz pakiet File System Security Module PowerShell - powinien być dostępny jako prosty plik ZIP.

  3. Otworzyć konsolę Powershell, uruchomić Get-Module -ListAvailable i upewnić się, że NTFSSecurity pojawi się gdzieś na liście zarejestrowanych modułów.

  4. W konsoli Powershell uruchomić Import-Module NTFSSecurity.

  5. w konsoli Powershell uruchomić Remove-Item2 “YYYY” -Recurse , gdzie YYYYY jest ścieżką Windowsa do folderu, który chcesz rekurencyjnie usunąć (np. C:\Potatoes\Badgers\FolderToDelete ).

0
0
0
2015-10-09 16:08:22 +0000

W końcu dowiedziałem się, jak to zrobić z Powershell na Windows 10, gdzie poszczególne nazwy plików były zbyt długie. Oto kroki, które wykonałem, aby to zrobić w systemie Windows 10:

  1. Download the File System Security PowerShell Module package - powinien być dostępny jako prosty plik ZIP.
  2. Rozpakuj plik Zip jako folder NTFSSecurity w katalogu C:\WINDOWS\system32 \WindowsPowerShell\v1.0\Moduły.
  3. Otwórz konsolę Powershell z podwyższeniem administracyjnym (alias Admin Mode) i uruchom Get-Module -ListAvailable i upewnij się, że NTFSSecurity pojawi się gdzieś na liście zarejestrowanych modułów.
  4. Uruchom Set-ExecutionPolicy Unrestricted aby ominąć podpisany tryb wykonania. Musisz potwierdzić tę akcję Y(es)
  5. Ostatecznie cd do folderu, który chcesz usunąć.
  6. W konsoli Powershell, uruchom Import-Module NTFSSecurity.
  7. W konsoli Powershell uruchom Remove-Item2 “YYYY” -Recurse , gdzie YYYYY to względna lub bezwzględna ścieżka Windows do folderu, który chcesz rekurencyjnie usunąć (np. C:\Potatoes\Badgers\FolderToDelete ).
  8. Sprawdź, czy to zadziałało.
  9. Ostatecznie wróć do podpisanego trybu wykonania z Zawartą Polityką Wykonywania Ustawień. Musisz potwierdzić tę akcję za pomocą Y(es).
0
0
0
2019-07-16 21:25:40 +0000

Przejdź do katalogu w WinRAR, wybierz plik, naciśnij F2, zmień nazwę pliku na krótszą. Następnie można usunąć plik jak zwykle.

Źródło: https://www.youtube.com/watch?v=qQTyTprFAOg

0
0
0
2017-07-05 10:44:55 +0000

Jeśli masz zainstalowany Bash na Ubuntu w Windows, możesz cd do katalogu nadrzędnego w zwykłym wierszu poleceń, a następnie wpisz:

bash -c "rm -rf dirname_here"

Który uruchamia bash, rekursywnie usuwa katalog z linuksa, w którym nie ma ograniczeń dotyczących nazw plików, a następnie wychodzi z powrotem do zwykłego wiersza poleceń.