Jak usunąć plik w systemie Windows ze zbyt długą nazwą pliku? [duplikować]

202

Moja żona ma kilka plików i folderów, które w jakiś sposób zakończyły się nazwami plików, które spowodowały, że nie można ich usunąć (nie można ich usunąć) w zwykły sposób lub za pomocą wiersza polecenia. Uważam, że nazwy plików są zbyt długie ze względu na głębokość struktur folderów. Czy ktoś wie o dobrym narzędziu do czyszczenia takich plików?

użytkownik3048
źródło
Jak powstały te pliki?
Nick
Przepraszam za moją niewiedzę na ten temat, ale czy system Windows nie powinien obsługiwać tych plików? Czy to, co opublikuje Eddins, nie powinno być automatycznie wykonywane przez system Windows (nawet z Eksploratora)?
Stefanos Kalantzis
2
@ Mokubai- Duplikat pytania należy oznaczyć jako duplikat tego pytania , ponieważ pytanie to jest starsze .
AStopher
1
@cybermonkey: I ma lepszą odpowiedź.
Ellesedil
Dla dalszych czytelników metoda 7zip z CTRL+DELETE jest moim zdaniem najłatwiejszą metodą ...
Christian Gollhardt

Odpowiedzi:

426

Jeśli chcesz całkowicie usunąć katalog, który zawiera długie ścieżki, robocopywykonuje BARDZO dobrą robotę:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

Działa to, ponieważ robocopy wewnętrznie korzysta z wersji funkcji Win32 obsługujących Unicode, z \\?\prefiksem ścieżek plików ; funkcje te mają limit 2¹⁶-1 (32 767) znaków zamiast 259.

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

Benoit
źródło
1
Wydajny, gdy w systemie plików nie ma zapisanej krótkiej nazwy (8.3).
Antoine RODRIGUEZ
1
Działa to dobrze z moimi upartymi plikami pamięci podręcznej Sklepu Windows , które odmówiły usunięcia. Dzięki!
Samir
1
Musiałem dodać / wyczyścić linię robocopy, aby to zadziałało, ale potem
załatwiło sprawę
3
Robocopy jest tym, co wpędziło mnie w ten bałagan, ale nigdy nie przyszło mi do głowy, aby użyć Robocopy, aby mnie wydostać. Świetna odpowiedź! Dzięki!
Jay Michaud,
2
@SarahofGaia, mój zły, to 2¹⁶ - 1 faktycznie
Benoit
91

Z wiersza polecenia:

dir /X

Spowoduje to wyświetlenie listy plików / folderów w formacie krótkich nazw. Następnie użyj krótkiej nazwy dokładnie tak, jak napisano, aby usunąć plik:

del LONGF~1.txt
Will Eddins
źródło
1
Podoba mi się ten, to trochę miłego myślenia bocznego.
Col
Chociaż nie mogę zagwarantować, że zadziała w tym przypadku, użyłem go kilka razy, aby usunąć foldery, które mają nieprawidłowe znaki na końcu, które uniemożliwiają ich normalne usunięcie.
Will Eddins,
1
Działa to w przypadku plików i folderów w bieżącym katalogu, ale jeśli jakoś uda ci się znaleźć w folderze, którego ścieżka jest zbyt długa, to nie pomoże. Na przykład, jestem obecnie w konsoli na zbyt długiej ścieżce i nie mogę nawet dirlub cd ...
Bobson,
1
@ Bobson Jeśli nie możesz zamiast tego dirużyć pushd. To działało dla mnie.
BadHorsie,
4
To nie działa w systemie Windows 10, wyświetlana nazwa pliku jest długa
Loenix
53

Robię postępy na ścieżce, zmieniając nazwę każdego kolejnego folderu nadrzędnego na „1” i próbuję usunąć. Skutecznie skracasz ścieżkę za każdym razem i nigdy nie musiałem pracować nad więcej niż 4 lub 5 katalogami, dopóki nie będę w stanie usunąć całej struktury katalogów (która może, ale nie musi być taka, jakiej chcesz). Możesz to zrobić również z ostatniego folderu podrzędnego i pracować w górę lub w dół.

joeqwerty
źródło
7
To była jedyna rzecz, która działała dla mnie. Wszystkie inne sztuczki podane tutaj i na innych forach takich jak to nie działały.
Andrew Arnott,
Była jedyną sugestią, która zadziałała dość dziwnie.
Nestor Ledon
To działało dla mnie, skrót, który mi pomógł mv * 1 && cd 1. Nie działało to, gdy w katalogu znajdowało się wiele plików, ale w tym momencie rm -rf *zwykle działało .
Alexander Varwijk
1
Nie można tego zrobić w
systemie
3
Nie tylko to rozwiązało problem, ale także wyjaśniło, w jaki sposób skończyłem z problemem. Musiałem mieć ścieżkę, która była blisko limitu, a następnie zmieniłem nazwę folderu nadrzędnego (dodałem do nazwy coś w rodzaju „kopia zapasowa Zapisz 2016 2016”), który przesunął pliki w podfolderach ponad limit. Dobrze jest znać przyczynę i rozwiązanie, chociaż wiem, że może się to zdarzyć również w inny sposób, myślę, że jest to powszechny sposób, w jaki zdarza się ludziom.
eselk
13

W niektórych programach, w tym Command Prompt ( cmd.exe), można ominąć limit długości pliku, poprzedzając pełną ścieżkę w \\.\następujący sposób:

\\. \ C: \ jakiś katalog \ inny katalog \ plik o długiej nazwie
grawitacja
źródło
3
nie działa w
systemie
dzięki, cmd pracował z tym urokiem w Win7rm -rf \\directoryname
Philip Pryde
13

Sztuczka, której użyłem, aby ominąć ograniczenie długości „pełnej ścieżki i nazwy pliku” w celu przeniesienia, skopiowania lub usunięcia czegoś, polega na skróceniu go poprzez „włamanie się” do połowy (lub więcej) za pomocą zmapowanej litery dysku wskazującej folder w dół ścieżki .

więc masz c: \ some \ long \ path ... \ i \ foo \ bar \ folder \ oldfiles \ myoldfile.txt.

Następnie zamapuj dowolną literę dysku gdzieś na ścieżce, tak aby pierwszy fragment ścieżki miał tylko kilka znaków. Warunek wstępny - folder musi znajdować się w folderze współdzielonym (który może już być, jeśli znajduje się na serwerze, gdzie musiałem to zrobić), a jeśli jeszcze go nie ma, wybierz folder gdzieś na ścieżce i udostępnij to. W zależności od środowiska i poziomu paranoi zezwól wszystkim na modyfikowanie dostępu do udziału, o ile uprawnienia NTFS są dość restrykcyjne. Jeśli chcesz, po prostu zezwól na modyfikację praw tylko do własnego konta.

Teraz przejdź do folderu współdzielonego lub jednego w nim i udostępnij go lub użyj wiersza poleceń w następujący sposób. Załóżmy, że udostępniasz folder „foo” jako „fooshare”, możesz to zrobić

net use x: \\mycomputername\fooshare\bar\folders /persistent:no

a dysk X: wskazuje teraz bezpośrednio folder „foldery” w tym udziale, więc „x: \ oldfiles \ myoldfile.txt” jest teraz dość krótki.

(„/ Persistent: no” oznacza, że ​​to nie przetrwa następnego restartu i nie pomyli cię później. Nie zapomnij cofnąć udostępniania folderu po zakończeniu).

Pamiętaj, że nie trzeba udostępnić folder zawierający plik koniecznie, jeśli znajduje się ona wewnątrz folderu udostępnionego można po prostu mapy poprzez udział i zagnieżdżonych folderów do folderu docelowego blisko do pliku i że działa dobrze.

Musiałem użyć tej techniki, wykonując masywną robotę między dwoma serwerami, gdy zdaliśmy sobie sprawę, że użytkownicy zamapowali dyski dość głęboko w strukturze folderów, więc mogli używać 255 znaków, ale przekraczało to całkowitą długość ścieżki do pliku po uzyskaniu dostępu z lokalnego katalogu głównego dysku.

AdamV
źródło
4
możesz uniknąć udostępniania, używając, subst x: C:\Some\first\part\of\the\long\patha następnie usuń dysk za pomocąsubst x: /d
mihi
1
Niezła próba, ale gdy masz 10 x folderów zagnieżdżonych, nie jest to możliwe.
Julian Knight
substSztuczka wydaje się działać dobrze, tak długo, jak nazwa pliku nie jest tak długo, jak na co iść ponad 260 znaków, nawet u podstaw jazdy.
Stephen Chung
Nie musisz też jawnie udostępniać żadnego folderu net use, możesz użyć domyślnych udziałów administratora:net use x: \\localhost\c$\bar\folders /persistent:no
kapex
9

Najprostszym sposobem, jaki znalazłem, jest uruchomienie z płyty CD z Ubuntu na żywo.

Alternatywnie możesz utworzyć folder współdzielony w połowie ścieżki, a następnie zamapować na niego dysk sieciowy i usunąć go z zamapowanego folderu (nawet na tym samym komputerze)

Przełęcz
źródło
17
To zabawne, jak często Live CD z Ubuntu pomoże rozwiązać problemy z systemem Windows ^^
Ivo Flipse
1
Zauważyłem, że ja, podejrzana sieć próbuję płyty CD na żywo, problem z systemem plików spróbuj płyty CD na żywo, uszkodzona tablica partycji itp. Itp .:-)
Col
To jedyne rozwiązanie, które działało dla mnie. Kocham cię, Linux! <3
David Frye
1
Uruchom bash z systemu Windows Linux nie jest wymagany. ;-) Również jeśli korzystasz z systemu Windows 10, po prostu zainstaluj „Podsystem Windows dla systemu Linux”, po prostu system Windows używa haczyków interfejsu API Ubuntu, aby wykonać zadanie ... narzędzia, w tym „apt, ssh, rsync, find, grep, awk, sed, sortuj, xargs, md5sum, gpg, curl, wget, apache, mysql, python, perl, ruby, php, gcc, tar, vim, emacs, diff, patch i większość dziesiątek tysięcy pakietów binarnych w archiwach Ubuntu! "to jest bardzo pełne środowisko programistyczne Linux że właśnie dzieje się w systemie Windows. zdnet.com/article/ubuntu-and-bash-arrive-on-windows-10
Dawesi
cygwin to kolejna alternatywa dla uruchamiania poleceń LINUX w
systemie
5

Zmień nazwę katalogu wytnij / wklej plik w innym miejscu, a następnie usuń go. Działa tutaj.

Lub po prostu z wiersza poleceń, jeśli nie masz ochoty przezwyciężyć kłopotów.

Wieża
źródło
To działa jak urok. Wykop tam (dla mnie to były super-zagnieżdżone node_modulesfoldery), przeciągnij go na pulpit i usuń. Opłucz i powtórz, gdy przejdziesz kilka folderów jednocześnie. Co za okropny problem.
nickb
7
To nie działało dla mnie - operacja wklejania nie powiodła się z powodu długiej nazwy pliku - nie ma znaczenia, gdzie go wyciąć.
UpTheCreek 21.01.16
1

Prawdopodobnie nie najlepszy sposób i jestem zainteresowany tym, co wymyślą inni -

Miałem to raz i spróbowałem kilku rzeczy bez powodzenia. Zamiast szukać dobrego narzędzia, uruchomiłem ponownie z dyskiem Windows, poszedłem do konsoli odzyskiwania i po prostu usunąłem stamtąd. Pracowałem po raz pierwszy i naprawdę dobrze!

Zrobiłem też Google dla ciebie i znalazłem to - DelinvFile wygląda dobrze, ale nie może tego ręczyć.

Edycja - Ostrzeżenie, właśnie zobaczyłem, że powyższe jest tylko próbą - Może nie tak dobre, jak myślałem na początku!

William Hilsum
źródło
Darmowy rimraf działa dobrze i działał, gdy zawiodły wszystkie inne pomysły. Wymaga node.js
Julian Knight