Come eliminare un file in Windows con un nome file troppo lungo? [duplicare]


202

Mia moglie ha diversi file e cartelle che in qualche modo hanno finito per avere nomi di file che li hanno resi non cancellabili (non possono essere eliminati) con mezzi normali o tramite la riga di comando. Credo che i nomi dei file siano troppo lunghi a causa della profondità delle strutture delle cartelle. Qualcuno sa di una buona utility per ripulire i file come questo?


Come sono stati creati questi file?
Nick,

Ci scusiamo per la mia ignoranza su questo argomento, ma Windows non dovrebbe gestire questi file? Cosa dovrebbe pubblicare Eddins pubblicato automaticamente da Windows (anche da Explorer)?
Stefanos Kalantzis,

2
@ Mokubai- La domanda duplicata dovrebbe essere contrassegnata come duplicata di questa, poiché questa domanda è più vecchia .
Più tardi il

1
@cybermonkey: e ha una risposta migliore.
Ellesedil,

Per altri lettori, il metodo 7zip con CTRL+DELETE è il metodo più semplice secondo me ...
Christian Gollhardt

Risposte:


426

Quando si desidera eliminare completamente una directory e contiene percorsi lunghi, robocopyfa un ottimo lavoro:

mkdir empty_dir
robocopy empty_dir the_dir_to_delete /mir
rmdir empty_dir
rmdir the_dir_to_delete

Questo funziona perché robocopy utilizza\\?\ internamente le versioni compatibili con Unicode delle funzioni Win32, con il prefisso per i percorsi dei file ; quelle funzioni hanno un limite di 2¹⁶-1 (32.767) caratteri invece di 259.

Potrebbe essere necessario eseguire questo processo più di una volta per sbarazzarsi di tutti i file.


1
Efficace quando non esiste un nome breve (8.3) memorizzato nel filesystem.
Antoine RODRIGUEZ,

1
Questo ha funzionato bene con i miei file cache testardi di Windows Store che si sono rifiutati di essere cancellati. Grazie!
Samir,

1
Ho dovuto aggiungere / eliminare la linea del robot per farlo funzionare, ma dopo ha fatto il trucco
actionhrimp

3
Robocopy è ciò che mi ha portato in questo pasticcio, ma non mi è mai venuto in mente di usare Robocopy per tirarmi fuori. Bella risposta! Grazie!
Jay Michaud,

2
@SarahofGaia, mio ​​male, è 2¹⁶ - 1 in realtà
Benoit

91

Da un prompt dei comandi:

dir /X

Questo elencherà i tuoi file / cartelle in formato nome breve. Quindi utilizzare il nome breve esattamente come scritto per eliminare il file:

del LONGF~1.txt

1
Mi piace quello, è un bel po 'di pensiero laterale.
Col

Anche se non posso garantire che funzionerà in questo caso, l'ho usato più volte per eliminare cartelle con caratteri non validi alla fine che ne rendono impossibile l'eliminazione con mezzi normali.
Will Eddins,

1
Funziona con file e cartelle nella directory corrente, ma se in qualche modo riesci a ritrovarti in una cartella il cui percorso è troppo lungo, non sarà di aiuto. Ad esempio, sono attualmente in una console in un percorso troppo lungo e non posso nemmeno diro cd ...
Bobson,

1
@Bobson Se non è possibile dirutilizzare pushdinvece. Questo ha funzionato per me.
BadHorsie,

4
Questo non funziona con Windows 10, il nome del file visualizzato è quello lungo
Loenix

53

Passo progressivamente verso il mio percorso, rinominando ogni cartella genitore successiva in "1" e tentando di eliminarla. Stai abbreviando effettivamente il percorso ogni volta e non ho mai dovuto lavorare con più di 4 o 5 directory fino a quando non sarò finalmente in grado di eliminare l'intera struttura di directory (che può essere o meno ciò che desideri). Potresti farlo anche dall'ultima cartella figlio e avanzare o scendere.


7
Questa è stata l'unica cosa che ha funzionato per me. Tutti gli altri trucchi forniti qui e in altri forum come questo non hanno funzionato.
Andrew Arnott,

È stato l'unico suggerimento che ha funzionato abbastanza stranamente.
Nestor Ledon,

Questo ha funzionato per me, una scorciatoia che mi ha aiutato era mv * 1 && cd 1. Questo non ha funzionato quando più file erano nella directory ma a quel punto di rm -rf *solito ha funzionato.
Alexander Varwijk,

1
Non è possibile farlo in Windows 10 ... la rinomina genera l'errore "nome file troppo lungo"
Dawesi,

3
Questo non solo ha risolto il problema per me, ma spiega anche come ho finito con il problema in primo luogo. Devo aver avuto un percorso vicino al limite, quindi ho rinominato una cartella principale (aggiunto qualcosa come "backup Nov 2016 save" al nome) che ha spinto i file nelle sottocartelle oltre il limite. Buono a sapersi sia la causa che la soluzione, anche se so che può succedere anche in altri modi, penso che questo sia un modo comune che succede alla gente.
eselk,

13

In alcuni programmi, incluso il Prompt dei comandi ( cmd.exe), puoi aggirare il limite di lunghezza del file prefissando il percorso completo con \\.\questo:

\\. \ C: \ some directory \ other directory \ un file con nome lungo

3
non funziona in Windows 10
Dawesi,

grazie, cmd ha funzionato con questo in Win7rm -rf \\directoryname
Philip Pryde il

13

Un trucco che ho usato per aggirare il limite di lunghezza "percorso completo e nome file" per spostare, copiare o eliminare qualcosa è accorciarlo "rompendo" a metà (o più) usando una lettera di unità mappata che punta a una cartella lungo il sentiero .

quindi hai c: \ some \ long \ path ... \ e \ foo \ bar \ cartelle \ oldfiles \ myoldfile.txt.

Quindi mappare una lettera di unità arbitraria da qualche parte lungo il percorso in modo che la prima parte del percorso diventi lunga solo pochi caratteri. Prerequisito: la cartella deve trovarsi in una cartella condivisa (che potrebbe già essere se si trova su un server, dove è necessario farlo) e, se non lo è già, selezionare una cartella da qualche parte nel percorso e condividilo. A seconda dell'ambiente e del livello di paranoia, consentire a tutti di modificare l'accesso alla condivisione purché le autorizzazioni NTFS siano ragionevolmente restrittive. Se lo desideri, consenti solo i diritti di modifica solo sul tuo account.

Ora vai alla cartella condivisa o una al suo interno e condividila, oppure usa la riga di comando come segue. Supponiamo che la cartella condivisa "foo" sia "fooshare", quindi puoi farlo

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

e l'unità X: ora punta direttamente alla cartella "cartelle" all'interno di quella condivisione, quindi "x: \ oldfiles \ myoldfile.txt" ora è piuttosto breve.

(Il "/ persistente: no" significa che questo non sopravviverà al prossimo riavvio e ti confonderà in seguito. Al termine, non dimenticare di annullare la condivisione della cartella.)

Ricordate, non si dispone di condividere la cartella che contiene il file necessariamente, se è già all'interno di una cartella condivisa si può semplicemente mappare attraverso la condivisione e le cartelle nidificate in una cartella di destinazione vicino al file e che funziona bene.

Ho dovuto usare questa tecnica facendo un massiccio robocopy tra due server quando ci siamo resi conto che gli utenti avevano mappato le unità abbastanza in profondità nella struttura delle cartelle, quindi erano stati in grado di usare 255 caratteri da lì, ma che superava la lunghezza totale del percorso del file quando vi si accede dalla radice dell'unità locale.


4
è possibile evitare la condivisione utilizzando subst x: C:\Some\first\part\of\the\long\pathe successivamente eliminare l'unità consubst x: /d
mihi,

1
Bel tentativo ma quando hai 10 di k di cartelle nidificate non è possibile.
Julian Knight,

Il substtrucco sembra funzionare bene, purché il nome del file non sia così lungo da far superare i 260 caratteri anche alla radice di un'unità.
Stephen Chung,

Inoltre non è necessario condividere esplicitamente alcuna cartella con net use, è possibile utilizzare le condivisioni di amministrazione predefinite:net use x: \\localhost\c$\bar\folders /persistent:no
kapex

9

Il modo più semplice che ho trovato è l'avvio da un CD live di Ubuntu.

In alternativa è possibile creare una cartella condivisa a metà percorso e quindi mappare un'unità di rete su quella e fare l'eliminazione dalla cartella mappata (anche sullo stesso computer)


17
È divertente quanto spesso un Live CD di Ubuntu aiuterà a risolvere i problemi di Windows ^^
Ivo Flipse,

1
Ho notato che io stesso, la rete malvagia prova un CD live, il problema del filesystem prova un CD live, una tabella delle partizioni corrotta ecc. Ecc. :-)
Col

Questa è l'unica soluzione che ha funzionato per me. Ti amo, Linux! <3
David Frye,

1
Esegui bash da Windows Non è richiesto Linux. ;-) Inoltre, se stai eseguendo Windows 10, installa semplicemente "Sottosistema Windows per Linux", in pratica Windows usa gli hook di Ubuntu API per fare il lavoro ... utils inclusi "apt, ssh, rsync, find, grep, awk, sed, ordina, xargs, md5sum, gpg, curl, wget, apache, mysql, python, perl, ruby, php, gcc, tar, vim, emacs, diff, patch e la maggior parte delle decine di migliaia di pacchetti binari negli archivi Ubuntu! "Questo è un ambiente di sviluppo Linux molto completo che funziona su Windows. Zdnet.com/article/ubuntu-and-bash-arrive-on-windows-10
Dawesi

cygwin è un'altra alternativa per eseguire i comandi LINUX in windows
atom88,

5

Rinomina la directory di taglia / incolla il file da qualche altra parte, quindi eliminalo. Funziona qui.

O semplicemente dal prompt dei comandi, se non hai voglia di affrontare il problema.


Funziona come un fascino. Scava lì (per me, erano node_modulescartelle nidificate ), trascinalo sul desktop ed elimina. Risciacqua e ripeti mentre vai su alcune cartelle alla volta. Che problema odioso.
Nick

7
Questo non ha funzionato per me - l'operazione di incollaggio non è riuscita a causa del lungo nome del file - non importa dove tagliarla.
UpTheCreek

1

Probabilmente non è il modo migliore e sono interessato a vedere cosa ne pensano gli altri -

L'ho avuto una volta e ho provato alcune cose senza fortuna. Invece di cercare un buon strumento, ho riavviato con il disco di Windows, sono andato alla console di ripristino e l'ho eliminato da lì. Ha funzionato la prima volta e davvero bene!

Inoltre, ho appena creato un Google per te e l' ho trovato: DelinvFile sembra buono ma non può garantirlo.

Modifica - Attenzione, appena visto quanto sopra è solo una prova - Forse non è buono come ho pensato prima!


Il rimraf gratuito funziona bene e ha funzionato quando tutte le altre idee sono fallite. Richiede node.js
Julian Knight l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.