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

Come cancellare directory con percorsi/nomi troppo lunghi per la normale cancellazione

Windows sembra avere un limite di lunghezza sui nomi dei file quando si cerca di cancellare, anche se non impedisce la creazione di questi file.

Il nostro processo di compilazione crea un certo numero di file temporanei (molti build off di un WSDL) che funzionano al di sopra di questo limite. Il nostro script formica è in qualche modo in grado di cancellarli quando si fa una pulizia, ma a volte ho bisogno di cancellare la directory workarea (dove vanno tutti i file temporanei) senza fare una pulizia completa da formica.

Si tratta degli stessi errori questa domanda , ma le risposte non funzionano per me, perché ho a che fare con una directory, non con un file, e non sempre so quali sono i file o sottodirectory specifiche che causano il problema. E sto cercando di evitare qualsiasi processo manuale (a parte l'attivazione di un singolo comando) per cancellarli effettivamente.

Se provo a cancellare la directory da Explorer ottengo l'errore

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

Provare Remove-Item in powershell dà il seguente errore:

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>
``` &001 


Conoscete qualche strumento o modo semplice per aggirare questo errore di cancellazione senza dover trovare manualmente i file problematici e spostarli/rinominarli?

Risposte (23)

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

Usare il File Manager 7-Zip per cancellarli.

Se si hanno ancora problemi, assicurarsi di utilizzare Shift+Cancella all'interno del File Manager 7-Zip. Altrimenti, Windows cerca di spostarli nel Cestino (che fallirà di nuovo).

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

Nessuna delle altre risposte (gratuite) qui ha funzionato per me, ma ne ho trovata una su un altro sito:

rimraf <dir>

rimraf è un pacchetto Node.js , quindi sarà necessario installare Node.js che include npm . Poi si può eseguire:

npm install -g rimraf
``` &001 


Poi si può eseguire `rimraf` dalla linea di comando. 


Ho trovato questa soluzione perché npm stesso causava questo problema per il modo in cui annida le dipendenze. 


A proposito, `rimraf` prende il nome dal comando UNIX `rm -rf`, che cancella ricorsivamente file e cartelle.
155
155
155
2016-03-03 16:45:54 +0000

Non è necessario installare alcun programma per risolvere questo problema.

Questo problema è facilmente risolvibile utilizzando robocopy, preinstallato sin dal lancio di Windows Vista nel 2006.

Ad esempio, in alcuni casi è stato segnalato il fallimento di rmdir /S /Q <dir>. Non è necessario utilizzare 7zip o qualsiasi altro strumento di terze parti. Powershell è un overkill. Cygwin può funzionare, ma potrebbe non essere installato. Quindi, concentriamoci su robocopy

L'idea è di

  1. usare robocopy per copiare+aggiornamento
  2. da una nuova cartella vuota
  3. alla cartella che si vuole cancellare, la destinazione.

Dopo aver eseguito robocopy, anche la directory di destinazione sarebbe vuota.

Queste istruzioni sono per la riga di comando. Basta aprire la ricerca in Windows, digitare cmd e premere Invio.

Supponiamo che il target per la cancellazione sia:

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

Procediamo come segue:

  1. Per prima cosa creare una directory vuota, f.i. C:\emptyfolder.

    1. Copiare+aggiornare dalla directory vuota al target, usando l'opzione /purge
    1. Cancellare la directory vuota. Non ne avete più bisogno.

Poiché non ci sono file o cartelle nella directory di origine (C:\emptyfolder), elimina semplicemente i file e le cartelle sotto la directory di destinazione (C:\delete\this folder\with a very long name) in modo ricorsivo!

  • Trucco finale: si può evitare di scrivere a mano

Stare attenti : I file cancellati non andranno nella cartella del cestino! Una volta cancellati, i file non possono essere recuperati.

(Tratto da “Path too long? Use Robocopy” di BVLANGEN )

PS: Mi rendo conto che questa risposta era qui, meno didatticamente. Come cancellare un file in Windows con un nome di file troppo lungo? [duplicato] Benoit aggiunto:

Potrebbe essere necessario ripetere questo processo più di una volta per eliminare tutti i file.

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

Credo di aver trovato un modo per cancellare le cose da cmd. In origine ho provato il comando del, ma non ha funzionato. Poi mi sono ricordato di rmdir. Facendo quanto segue:

rmdir /S /Q <dir>
``` &001 


sembra aver funzionato.
30
30
30
2014-11-25 20:22:32 +0000

Lo strumento che ho usato quando ho avuto questo problema è stato FastCopy . Ho selezionato Cancella tutto dal menu a tendina, ho selezionato la directory che volevo cancellare e ho cliccato Cancella tutto.

FastCopy è portatile (non è necessaria l'installazione) e sono disponibili versioni a 32 e 64 bit.

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

L’rm -rf di Cygwin funziona bene su lunghi percorsi!

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

Senza installare software aggiuntivo si può usare il comando subst per creare temporaneamente un alias ad una directory con nome lungo.

ad esempio se si vuole cancellare la cartella C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted si può usare il comando

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

e poi si può cancellare X:\folder to be deleted in Windows Explorer o nel prompt dei comandi facilmente. Per rimuovere l'alias della lettera di unità temporanea utilizzare il comando

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

Basta passare da Powershell al comando correndo di sotto:

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

La soluzione di Dentrasi è ciò che ha funzionato meglio per me, ma volevo pubblicare i passaggi specifici in una risposta di alto livello.

  1. 1. Scaricare e installare l'ultima versione stabile di 7zip .
  2. 2. Eseguire il File Manager 7zip ( 7zfm.exe ).
  3. 3. Nel 7zip File Manager, navigare in modo da poter vedere il nome della cartella che si vuole cancellare (cioè si è nella cartella madre).
  4. Tenere premuto il tasto Shift.
  5. Fare clic sul tasto “Cancella”, sulla tastiera o nella barra degli strumenti del 7zip File Manager; sicurarsi di tenere ancora premuto il tasto Shift.
  6. Fare clic sul tasto “Cancella_”, sia sulla tastiera che nella barra degli strumenti del 7zip File Manager; sicurarsi di tenere ancora premuto il tasto Shift.
  7. Fare clic sul tasto “Cancella”. 6. Fare clic sul pulsante “OK_”; sicurarsi di tenere ancora premuto il tasto Shift.
12
12
12
2016-09-09 10:52:17 +0000

Ci sono due cose che non sono già state menzionate nelle risposte esistenti.

  1. È possibile utilizzare il prefisso del percorso di lunghezza estesa per accedere ai percorsi lunghi
  2. Con Windows 10, è possibile abilitare il supporto di percorsi lunghi per uso generale - si noti tuttavia che non tutte le applicazioni funzioneranno con i percorsi lunghi, si dovrebbe testare il software più vecchio. Solo i software con un'appropriata voce di manifesto saranno in grado di utilizzarlo.

Long Path Prefix

L'API di Windows ha una funzione speciale che supporta i nomi dei percorsi Unicode fino a 32k caratteri (ogni elemento è lungo fino a 255 caratteri).

Questo è spesso erroneamente indicato come denominazione UNC, ma non è correlato.

Il prefisso usato per dire all'API di usare percorsi Unicode lunghi è `\?Ci sono due cose che non sono già state menzionate nelle risposte esistenti.

  1. È possibile utilizzare il prefisso del percorso di lunghezza estesa per accedere ai percorsi lunghi
  2. Con Windows 10, è possibile abilitare il supporto di percorsi lunghi per uso generale - si noti tuttavia che non tutte le applicazioni funzioneranno con i percorsi lunghi, si dovrebbe testare il software più vecchio. Solo i software con un'appropriata voce di manifesto saranno in grado di utilizzarlo.

Long Path Prefix

L'API di Windows ha una funzione speciale che supporta i nomi dei percorsi Unicode fino a 32k caratteri (ogni elemento è lungo fino a 255 caratteri).

Questo è spesso erroneamente indicato come denominazione UNC, ma non è correlato.

Il prefisso usato per dire all'API di usare percorsi Unicode lunghi è come in:

\?\D:\very long path
``` ```
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)

I nomi UNC sono normalmente usati quando si riferiscono a percorsi su server remoti nella forma \servername\path name\file name. Si può combinare questo con il prefisso del percorso lungo così: \?\UNC\server\share

Si noti che alcune applicazioni, scritte male ma purtroppo abbastanza comuni, non supportano i percorsi dei file UNC né il prefisso del percorso lungo.

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

Supporto dei percorsi lunghi

Questa è un'opzione che è stata aggiunta alle recenti versioni di Windows 10. Al momento della scrittura non è attivata di default in quanto richiede un supporto specifico per l'applicazione. È interessante notare che PowerShell ha il supporto integrato in modo che l'attivazione di questa opzione permetterà di utilizzare i percorsi lunghi direttamente negli script PowerShell.

È possibile attivarla tramite l'editor Group Policy se si dispone di una versione di Windows con questo. Oppure si può semplicemente utilizzare la seguente modifica del Registro di sistema. Come sempre, prima di fare qualsiasi cosa, eseguire il backup della sezione del Registro di sistema che si sta modificando.

  1. 1. Eseguire regedit.exe.
  2. 2. Confermare il prompt UAC.
  3. 3. Andare alla chiave: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  4. 4. Creare o modificare la chiave LongPathsEnabled.
  5. Se non esiste, fare clic con il tasto destro del mouse su Policies e selezionare New > Dword (32-bit) Value (32-bit) dal menu.
  6. Impostare LongPathsEnabled su 1 per attivare.

Qualsiasi applicazione con le voci di manifesto appropriate avrà ora accesso ai percorsi lunghi standard POSIX. Questo dovrebbe includere le applicazioni Windows Store.

Reference: https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/ (https://msdn.microsoft.com/en-us/library/aa365247.aspx)

UPDATE 2017-04-09

@maoizm ha evidenziato un problema con la chiave di registro di cui sopra così ho fatto [ qualche altra ricerca ]&003. Sembra che ora sia possibile impostare il supporto dei nomi di file lunghi con una chiave di sistema:

&001

Questo funziona ancora solo per le applicazioni che sono specificamente impostate per usarlo però (richiede una voce nel manifesto.xml dell'applicazione).

Si noti anche che non è possibile utilizzare i nomi dei percorsi relativi con questo metodo.

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

Mi piace la soluzione cmd. Anche se voglio condividere un'altra soluzione che funziona anche solo in Explorer: provate ad accorciare i nomi delle cartelle madri prima della cancellazione: nomi più corti accorceranno il percorso. Diciamo che avete questa struttura ad albero della cartella:

C:\

… Progetti

… … Alcuni Awesome Project durante la primavera 2014

… … … … Alcune attività nel parco della città un venerdì

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

… … … … … … … File reali con nomi lunghi, anche

In questo caso non è possibile cancellare le cartelle, non è possibile cancellare o rinominare i file. Se si desidera rimuovere l'intera struttura delle cartelle o parte di essa, è possibile rinominare temporaneamente le cartelle madri e accorciare il percorso, e quindi rimuovere la cartella. I nomi possono essere solo lettere:

C:\

… Progetti

… … x

… … y

… … … … … z

… … … … … … … … File reali con nomi lunghi, anche

Nel mio caso volevo solo rimuovere l'intera cartella con molte sottocartelle e file. Quindi non mi interessava il nome delle cartelle.

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

La soluzione a 7 cerniere funziona alla grande. Un'altra opzione se avete installato git è quella di aprire un bash shell e utilizzare:

rm -f

(o rm -rf per le cartelle)

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

Suggerisco Total Commander (shareware, ma continua a lavorare dopo il periodo di prova con una schermata iniziale di ronzio minima). Questo è il modo in cui risolvo sempre i problemi troppo lunghi del nome del file.

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

Ho creato un semplice programma java che utilizza robocopy per cancellare i file. Il barattolo è un programma eseguibile. Per l'output aggiuntivo eseguirlo dalla linea cmd. https://drive.google.com/file/d/0B5pSEjxJvt\1WVp1T3puSm1CNjg/view?usp=sharing

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

Potete anche cancellarli usando il loro equivalente nome breve. dir /x ve li mostrerà.

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

Ho provato tutte le altre risposte, ma non hanno funzionato (almeno per me).

Mi sono imbattuto in delinfile e ho lavorato abbastanza bene e abbastanza velocemente!

La sua prova è limitata a 3 azioni / 15 giorni ma è utilizzabile se si volevano eliminare solo alcune cartelle/file:

&004

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

Ho qui la risposta perfetta (per i file). Funziona in 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
``` &001 


Vedi anche: [ https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath ](https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath) &003 


Non una sola risposta alternativa in 4 domande era sufficiente per le mie esigenze. Sei il benvenuto nel mondo.
1
1
1
2017-01-09 12:08:22 +0000

Bigger Directories è progettato anche per questo compito.

  • Download
  • Utilizza una chiamata ricorsiva con RemoveDirectoryW per cancellare le directory esistenti
  • Utilizza un proprio repository di file per le directory appena create
  • I file possono essere spostati dalle directory prima della cancellazione delle directory di contatto.
  • Veloce, anche se la navigazione verso la parte superiore della directory è un click per ogni directory annidata
  • Windows XP(SP3) e su
  • Codice non firmato non gestito senza installer, quindi possibile Smartscreen avviso quando eseguito dalla cartella di riserva ad esempio desktop.

Maggiori informazioni su CodeProject .

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

Ho affrontato questo problema in Windows 10 e ho trovato questa facile soluzione.

  1. 1. Andate un po’ più in profondità nell'albero delle cartelle.
  2. 2. Trascinare e rilasciare una cartella da qualche parte al centro dell'albero fino all'inizio dell'albero utilizzando la barra degli indirizzi.
  3. Trascinare una cartella da qualche parte al centro dell'albero. 3. Come nella mia immagine, trascinare la casella rossa su quella verde. (in questo caso il percorso è più breve, ma funziona anche per i percorsi lunghi)
  4. Come nella mia immagine, trascinare il riquadro rosso nel riquadro verde. Poi il vostro percorso diventa più corto e cancellate come al solito usando il tasto cancella.

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

Ho finalmente scoperto come farlo tramite Powershell. Ecco le istruzioni che ho seguito per farlo funzionare su Windows 7:

    1. Creare una nuova cartella chiamata NTFSSecurity nella cartella C:\ \Utenti \XXXX \Documents \WindowsPowerShell \Modules \NTFSSecurity, dove XXXX è il vostro nome utente di Windows. Esempio: se il mio nome utente fosse “aspnyc”, la nuova cartella sarebbe C:\ \Users\aspnyc\Documents\WindowsPowerShell\Modules\NTFSSecurity .
    1. Scaricare il pacchetto File System Security PowerShell Module package - dovrebbe essere disponibile come semplice file ZIP.
    1. Aprire una console Powershell, eseguire Get-Module -ListAvailable e assicurarsi che NTFSSecurity compaia da qualche parte nella lista dei moduli registrati.
  1. Nella console Powershell, eseguire Import-Module NTFSSecurity.

  2. Nella console Powershell, eseguire Remove-Item2 “YYYYYY” -Recurse , dove YYYYY è il percorso di Windows della cartella che si desidera cancellare ricorsivamente (ad esempio C:\Potatoes\Badgers\FolderToDelete ).

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

Ho finalmente scoperto come fare questo con Powershell su Windows 10, dove i singoli nomi dei file erano troppo lunghi. Ecco i passi che ho seguito per far funzionare questo su Windows 10:

  1. 1. Scaricate il pacchetto File System Security PowerShell Module package - dovrebbe essere disponibile come semplice file ZIP.
  2. 2. Estrarre il file Zip come cartella NTFSSecurity nella directory C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules.
  3. Estrarre il file Zip come cartella NTFSSecurity nella directory C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules.
  4. Aprire una console Powershell con l'elevazione amministrativa (a.k.a. Admin Mode) ed eseguire Get-Module -ListAvailable e assicurarsi che NTFSSecurity compaia da qualche parte nella lista dei moduli registrati.
  5. Eseguire Set-ExecutionPolicy Unrestricted per bypassare la modalità di esecuzione firmata. Dovete confermare questa azione con una Y(e)
  6. Infine cd alla cartella che volete cancellare.
  7. Nella console di Powershell, eseguite Import-Module NTFSSecurity.
  8. 7. Nella console Powershell, eseguire Remove-Item2 “YYYYY” -Recurse , dove YYYY è il percorso relativo o assoluto di Windows alla cartella che si desidera cancellare ricorsivamente (ad esempio C:\Potatoes\Badgers\FolderToDelete ).
  9. Infine cd alla cartella che si desidera cancellare. Controllare se ha funzionato.
  10. 9. Eventualmente tornare alla modalità di esecuzione firmata con Set-ExecutionPolicy Restricted. Dovete confermare questa azione con Y(i).
0
0
0
2019-07-16 21:25:40 +0000

Navigare fino alla directory in WinRAR, selezionare il file, premere F2, rinominare il file con un nome più breve. Poi si può cancellare il file come al solito.

Source: https://www.youtube.com/watch?v=qQTyTprFAOg

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

Se avete Bash su Ubuntu su Windows installato, potete cd alla directory madre in un normale prompt dei comandi e poi digitare:

bash -c "rm -rf dirname_here"

Che lancia bash, cancella ricorsivamente la directory da linux dove non ci sono restrizioni di nome del file, e poi esce di nuovo al normale prompt dei comandi.