Wymuś usunięcie plików o dość dużej nazwie

62

Regularnie używam Node.js do zarządzania zależnościami dla programów, które piszę, nic wielkiego. Dzisiaj skończyłem z taką strukturą folderów:wprowadź opis zdjęcia tutaj

Próba usunięcia dowolnego pliku napotkała ten błąd:

Nazwy plików źródłowych są większe niż obsługiwane przez system plików. Spróbuj przenieść się do lokalizacji, która ma krótszą nazwę ścieżki, lub spróbuj zmienić nazwę na krótszą nazwę (nazwy) przed próbą wykonania tej operacji.

Było już w C: \, więc nie będzie dużo krótsze.

Seiyria
źródło
czy masz jakiś pomysł, jak twoja struktura folderów jest tak duża, spotkałem się z tą samą sytuacją podczas instalacji gruntu.
eran otzer
1
@eranotzer przy użyciu npm.
Seiyria,
Nie, czy zależności w pliku Package.json zostały zapisane niepoprawnie?
eran otzer
@eranotzer Tak. Z powodu działania npm @ 2 każda zależność zagnieżdżała w sobie swoje zależności. Oznaczało to, że łańcuchy zależności mogą być dowolnie długie. npm @ 3 próbuje dostosować to zachowanie.
Seiyria,

Odpowiedzi:

75

Użyj narzędzia Microsoft robocopy.exe.

  1. Utwórz nowy pusty folder, np c:\empty
  2. Następnie skopiuj ten pusty folder do folderu zawierającego długie nazwy plików, które próbujesz usunąć, np c:\myannoyingfolder. Zrób tak w wierszu polecenia:

    robocopy / MIR c: \ empty c: \ myannoyingfolder

Flo
źródło
Ponieważ jest to część mojego przepływu pracy dość często, wymyśliłem, jak zintegrować go z powłoką systemu Windows. Zobacz moją odpowiedź poniżej. :)
toddmo
Uwaga: wykonanie tego polecenia może potrwać kilka sekund lub nawet minut. Więc nie martw się i pozwól magii :-)
Adil Malik
Dzięki, pracowałeś dla mnie. Musiałem się upewnić, że zabiłem również każdy proces (IIS), który nadal trzymał jeden z plików.
Zręczny Shinobi,
Ilekroć próbuję otworzyć robocopy.exe, okno miga przez sekundę, a następnie nic się nie dzieje. Proszę o pomoc
Maulik Modi
29

okej, powiedzmy, że chcesz usunąć drzewo D:\very\long\path, niekoniecznie musisz używać narzędzi takich jak Robocopy.

  1. Przejdź do katalogu głównego dysku zawierającego katalog, którego nie można usunąć
  2. Utwórz katalog o nazwie jednoliterowej, np D:\a
  3. W takim przypadku przejdź do katalogu, który chcesz usunąć D:\very\long\path
  4. Wybierz wszystko ( Ctrl+ A) i Wytnij ( Ctrl- X)
  5. Przejdź do właśnie utworzonego folderu
  6. Wklej ( Ctrl- V)
  7. Teraz przejdź do katalogu głównego i usuń folder tymczasowy, w tym przypadku D:\a
  8. Następnie wróć i usuń oryginalny katalog
gd73
źródło
2
To nie zadziałało dla mnie przy pierwszej próbie. Jednak po powtórzeniu tej procedury kilka kolejnych poziomów folderów było w stanie usunąć wszystko.
abaldwin99
1
Świetne rozwiązanie, działało bezbłędnie. Prosty i skuteczny, dziękuję!
Caner Öncü,
ŚWIETNY!! działa jak marzenie!!! żadne inne narzędzia nie są potrzebne. Dzięki!
Prasanth KC,
Działa to świetnie i dodałbym do tego punkt, jeśli wybranie plików ze ścieżki nie działa, możesz wybrać folder gdzieś pośrodku długiej ścieżki i przenieść go zamiast tego do folderu tymczasowego, a następnie usunąć oba w podobny sposób.
Narayana Nagireddi,
4

Zacząłem pisać ten problem, próbując wielu poleceń, w tym del /Fi rmdir /S(oraz przytrzymując Shift podczas usuwania, aby ominąć kosz). Myślę, że rmdir /Sfaktycznie usunąłem wszystkie pliki, więc mogłem kontynuować usuwanie folderów, które były węzłami liści, a następnie przesuwać się o kilka węzłów w górę. W końcu wszystko wyczyściłem, ale to było śmieszne.

Seiyria
źródło
4

Możesz zintegrować tę funkcjonalność z powłoką systemu Windows. Moje rozszerzenie odpowiedzi Flo było zbyt długie, aby można było wypowiedzieć się na ten temat.

Dodałem Deletepolecenie do menu kontekstowego Windows.

wprowadź opis zdjęcia tutaj

delete.regPlik dodaje wpisy rejestru skojarzyć foldery z robodelete.batpliku wsadowego.

delete.reg

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Delete]

[HKEY_CLASSES_ROOT\Directory\shell\Delete\command]
"Extended"=""
@="\"D:\\Documents\\robodelete.bat\" \"%1\""

robodelete.bat

mkdir c:\empty
robocopy /MIR c:\empty %1
rmdir %1
rmdir c:\empty

Uwaga : Może być konieczna zmiana ścieżek w obu plikach zgodnie z własnymi preferencjami.

OSTRZEŻENIE : Nie ma możliwości cofnięcia tego polecenia. Nie używa kosza i nie prosi Y / N o potwierdzenie przed zniszczeniem folderu na dobre!

toddmo
źródło
Dziękuję za ostrzeżenie. Potrzebuję tego również w moim przepływie pracy, ale chciałbym uniknąć przycisku nuklearnego w menu prawym przyciskiem myszy, który nie ma potwierdzenia T / N. Jeśli będę miał czas, spróbuję dokonać tej korekty i zasugeruję edycję.
abaldwin99
1
@ abaldwin99, jak to może stackoverflow.com/a/1807318/1045881
toddmo
4

Narzędzie wiersza poleceń SuperDelete ( GitHub ) działało dla mnie po awarii innych opcji (Windows 10).

Joshua Fox
źródło
3

Najlepszym sposobem na to jest użycie robocopy, udokumentowałem to na moim osobistym blogu, abyś mógł śledzić:

http://clintboessen.blogspot.com.au/2014/05/how-to-delete-files-which-exceed-255.html

Clint
źródło
4
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie lub zniknie.
Andrea
0

W wielu przypadkach CDing do katalogu z wiersza poleceń i użycie DEL będzie działać.

Jeśli nie, musisz rozwinąć swoją nazwę W GÓRĘ drzewa katalogów: zmień nazwę folderu najniższego poziomu na krótszą nazwę (np. „A”), następnie nazwę folderu wyższego poziomu itd., Aż łączna ścieżka będzie wystarczająco krótka. Pracując od dołu do góry, zawsze manipulujesz nazwami, które mają krótszą pełną ścieżkę niż końcowe pliki.

Eugen Rieck
źródło
0
  • Otwórz administracyjny wiersz polecenia
  • net use z: c:\path
  • del z:\*.*

Dostosuj odpowiednio. Z: to po prostu dowolna litera dysku, do której należy odwzorować obrażającą ścieżkę. To ostatnie polecenie usuwania spowoduje wymazanie CAŁEGO katalogu, który został zmapowany - więc w razie potrzeby określ bardziej szczegółowo.

Bradley Forney
źródło
2
Jest to bardzo niebezpieczne dla użytkowników bez mocy! Istnieje możliwość wyczyszczenia dysku, jeśli zostanie wykonane nieprawidłowo.
Rudi Strydom
Uzgodnione w 100%. Zdecydowanie postępuj ostrożnie w tej sprawie.
Bradley Forney
0

Dobrym sposobem jest uruchomienie Linuksa na pendrive i usuwanie plików bez problemów z live CD .

Dariusz Filipiak
źródło
-1

Miałem również ten sam problem i sam go znalazłem. Po prostu zmień nazwę folderu nadrzędnego na możliwie jak najmniej. Dawny. Jeśli nasz folder w „ D ” jedzie jak D: // Folder / Undelete_Folder . Jedyną rzeczą, którą musisz zrobić, to zmienić nazwę nadrzędnej nazwy folderu tak małej, że możesz zmienić jej nazwę na „ a ”. Twoja lokalizacja to D: // a / Undelete_folde r. a następnie usuń folder nadrzędny.

Rohit R.
źródło
Nie tylko to niekoniecznie działa (a jeśli jest jeszcze większe, nawet z redukcją?), Ale wyraźnie wspomniałem, że mój folder znajduje się w katalogu głównym dysku.
Seiyria,
-2

Jeśli wszystko inne zawiedzie

Przejdź do ostatniego katalogu w ciągu. Wytnij pliki Wklej z powrotem do czwartego lub piątego pliku w ciągu. Następnie [Shift] + [Usuń] powinien wykonać lewę.

Sceptycznie podchodziłem do powyższego w wierszu polecenia z podwyższonym poziomem uprawnień, usuwając plik Test Restore z kopii zapasowej programu DPM.

mam nadzieję że to pomoże.

Andre
źródło
Prawdopodobnie nie zadziała, ponieważ nadal będą mieli długą ścieżkę do operacji cięcia.
Seiyria