it-swarm-eu.dev

Vieni per le directory con percorso/nomi troppo lunghi per l'eliminazione normale

Windows sembra avere un limite di lunghezza sui nomi dei file durante il tentativo di eliminazione, sebbene non impedisca la creazione di tali file.

Il nostro processo di generazione crea un certo numero di file temporanei (molti build fuori da un WSDL) che eseguono il controllo di questo limite. Il nostro script ant è in qualche modo in grado di eliminarli quando si esegue una pulizia, ma a volte ho bisogno di eliminare la directory area di lavoro (dove tutti i file temporanei vanno) senza fare una pulizia completa dalla formica.

Questo è lo stesso errore questa domanda , ma le risposte non funzionano per me dato che ho a che fare con una directory, non con un file, e non so sempre quali file o sottodirectory specifici stanno causando il problema. E sto cercando di evitare qualsiasi processo manuale (diverso dall'attivare un singolo comando) per eliminarli 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>

Qualcuno sa di alcuni strumenti o semplici modi per aggirare questo errore di eliminazione senza dover trovare manualmente i file dei problemi e spostarli/rinominarli?

371
Herms

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

rmdir /S /Q <dir>

sembra aver funzionato.

83
Herms

Usa il 7-Zip File Manager per eliminarli.

Se hai ancora problemi, assicurati di utilizzare Shift+Delete all'interno del file manager 7-Zip. Altrimenti, Windows tenta di spostarli nel Cestino (che fallirà di nuovo).

420
Dentrasi

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

rimraf <dir>

rimraf è un Node.js pacchetto, quindi dovrai installare Node.js che include npm . Quindi puoi eseguire:

npm install -g rimraf

Quindi puoi eseguire rimraf dalla riga di comando.

Ho trovato questa soluzione perché npm stesso stava causando questo problema a causa del modo in cui nidifica le dipendenze.

A proposito, rimraf ottiene il suo nome dal comando UNIX rm -rf, che elimina in modo ricorsivo file e cartelle.

310
jordanbtucker

C'è non c'è bisogno di installare alcun programma per risolvere questo problema.

Questo problema è facilmente risolvibile usando robocopy, preinstallato da Windows Vista, lanciato nel 2006.

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

L'idea è di

  1. usa robocopy per copiare + aggiornato
  2. da a nuova cartella vuota
  3. alla cartella che si desidera eliminare, 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.

Diciamo che target per la cancellazione è:

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

Procediamo come segue:

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

    mkdir C:\emptyfolder
    
  2. Copia + aggiorna dalla directory vuota alla destinazione, utilizzando l'opzione /purge

    robocopy c:\emptyfolder "C:\delete\this folder\with a very long name" /purge
    
  3. Elimina la directory vuota. Non ne hai più bisogno.

    rmdir c:\emptyfolder
    

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

  • Trucco finale: puoi evitare di scrivere a mano

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

    Trascinando la cartella da una finestra di Explorer e rilasciandola nella finestra Terminal/cmd.

Fai attenzione : I file cancellati non andranno nella cartella trash ! Una volta cancellati, i file non possono essere recuperati.

(Tratto da "Percorso troppo lungo? Usa Robocopy" di BVLANGEN )

PS: Mi rendo conto che questa risposta era qui, meno didatticamente. Come eliminare un file in Windows con un nome file troppo lungo? [duplicare]

Benoit aggiunto:

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

136
hectorpal

Lo strumento che ho usato quando ho avuto questo problema era FastCopy . Ho selezionato Elimina tutto dal menu a discesa, selezionato la directory che volevo eliminare e ho fatto clic su Elimina tutto .

FastCopy delete dialog screenshot

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

29
braveterry

rm -rf di Cygwin funziona bene su lunghi percorsi!

26
gdw2

Senza installare software aggiuntivo è possibile utilizzare il comando subst per creare temporaneamente un alias in una directory con nome lungo.

per esempio. Se si desidera eliminare la cartella C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted, è possibile utilizzare il comando

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

e quindi è possibile eliminare X:\folder to be deleted in Windows Explorer o nel prompt Prompt facilmente. Per rimuovere l'alias della lettera di unità temporanea, utilizzare il comando

subst x: /d
24
Kenneth L

Basta passare da PowerShell al comando eseguendo di seguito:

Cmd /C "rmdir /S /Q <dir>" 
22
Karl Glennon

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

  1. Scarica e installa l'ultima versione stabile di 7Zip .
  2. Esegui 7Zip File Manager ( 7zfm.exe ).
  3. In 7Zip File Manager, navigare in modo da poter vedere il nome della cartella che si desidera eliminare (ad esempio, si è nella cartella principale).
  4. Tieni premuto il tasto Maiusc.
  5. Fare clic sul pulsante "Elimina", sulla tastiera o nella barra degli strumenti di 7Zip File Manager; assicurati di tenere premuto il tasto Maiusc ancora .
  6. Fai clic sul pulsante "OK"; assicurati di tenere premuto il tasto Maiusc ancora .
18
Mass Dot Net

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

  1. È possibile utilizzare il prefisso del percorso di lunghezza estesa per accedere a percorsi lunghi
  2. Con Windows 10, è possibile abilitare il supporto per percorsi lunghi per uso generale. Tuttavia, non tutte le applicazioni funzioneranno con percorsi lunghi, è necessario testare il software precedente. Solo il software con una voce manifest appropriata sarà in grado di farne uso.

Prefisso del percorso lungo

L'API di Windows ha una funzione speciale che supporta i nomi di percorso Unicode fino a 32k caratteri (ogni elemento ha una lunghezza massima di 255 caratteri).

Questo spesso viene erroneamente chiamato denominazione UNC, ma non è comunque correlato.

Il prefisso utilizzato per indicare all'API di utilizzare lunghi percorsi Unicode è \\?\ come in:

\\?\D:\very long path

I nomi UNC vengono normalmente utilizzati quando si fa riferimento a percorsi su server remoti nel formato \\servername\path name\file name. È possibile combinare questo con il prefisso del percorso lungo così: \\?\UNC\server\share

Si noti che alcune applicazioni, mal scritte 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 lungo percorso

Questa è un'opzione che è stata aggiunta alle recenti versioni di Windows 10. Al momento della scrittura, non è attivata per impostazione predefinita in quanto richiede un supporto applicativo specifico. È interessante notare che PowerShell ha integrato il supporto in modo che l'attivazione di questa opzione consenta l'utilizzo di percorsi lunghi direttamente negli script di PowerShell.

È possibile attivarlo tramite l'editor Criteri di gruppo se si dispone di una versione di Windows. O puoi semplicemente utilizzare la seguente modifica del Registro di sistema. Come sempre, si prega di eseguire il backup della sezione del registro che si sta modificando prima di fare qualsiasi cosa.

  1. Esegui regedit.exe.
  2. Conferma il prompt UAC.
  3. Passare alla chiave: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  4. Crea o cambia la chiave LongPathsEnabled.
  5. Se non esiste, fare clic con il tasto destro del mouse su Criteri e selezionare Nuovo> Valore Dword (32 bit) dal menu.
  6. Impostare LongPathsEnabled su 1 per abilitare.

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

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

AGGIORNAMENTO 2017-04-09

@ Maoizm ha evidenziato un problema con la chiave di registro sopra così ho fatto un po 'di più scavando . Sembra che ora puoi impostare il supporto per il nome file lungo con una chiave di sistema:

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

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

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

10
Julian Knight

Mi piace la soluzione cmd. Anche se voglio condividere un'altra soluzione alternativa che funziona anche in Explorer: prova ad abbreviare i nomi delle cartelle padre prima della cancellazione: i nomi più corti ridurranno il percorso. Di ', hai questa struttura ad albero della cartella:

C: \

.. Progetti

.. .. Some 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 bla

.. .. .. .. .. File reali con nomi lunghi, anche

In questo caso non è possibile eliminare le cartelle, non è possibile eliminare o rinominare i file. Se si desidera rimuovere l'intera struttura della cartella o parte di essa, è possibile rinominare temporaneamente le cartelle principali e abbreviare il percorso, 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 importava dei nomi delle cartelle.

8
Anatoly Mironov

La soluzione 7-Zip funziona alla grande. Un'altra opzione se hai git installato è quello di aprire una shell bash e utilizzare:

rm -f

(o rm -rf per le cartelle)

7
User

Suggerisco Total Commander (shareware, ma continua a funzionare dopo il periodo di prova con solo una minima schermata di avvio nag). Questo è il modo in cui risolvo sempre i problemi troppo nome file.

4

Puoi anche eliminarli usando il loro nome breve equivalente. dir /x ti mostrerà.

2
Ian Boyd

Ho creato un semplice programma Java che utilizza robocopy per eliminare i file. Il barattolo è percorribile. Per l'output aggiuntivo eseguilo dalla riga cmd.

https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing

2
CamHart

Directory più grandi è progettato per questo compito.  enter image description here

  • Scaricare
  • Utilizza una chiamata ricorsiva con RemoveDirectoryW per eliminare le directory esistenti
  • Utilizza il proprio repository di file per le directory appena create
  • I file possono essere spostati dalle directory prima della cancellazione delle directory di contenimento.
  • Veloce, anche se la navigazione nella parte superiore della directory è un clic per directory annidata
  • Windows XP (SP3) e versioni successive
  • Codice non gestito senza firma senza programma di installazione, quindi avviso di Smartscreen possibile quando eseguito dalla cartella di riserva, ad es. desktop.

Maggiori informazioni su CodeProject .

1
Laurie Stearn

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

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

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

1
Jürgen Paul

Hai la risposta perfetta qui (per i file). Funziona su 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

Vedi anche: https://msdn.Microsoft.com/en-us/library/aa365247.aspx#maxpath

Non una sola risposta alternativa in 4 domande era sufficiente per le mie esigenze. Sei il benvenuto nel mondo.

1
Andrew

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

  1. Entra in un po 'più in profondità dell'albero delle cartelle.
  2. Trascina e rilascia una cartella da qualche parte a metà dell'albero verso un punto iniziale dell'albero usando la barra degli indirizzi.
  3. Come nella mia immagine, trascina la casella rossa nella casella verde. (in questo caso il percorso è più breve, ma funziona anche per i percorsi lunghi)
  4. Quindi il tuo percorso si accorcia e cancella normalmente usando il tasto Canc.

 enter image description here

1

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

  1. Crea una nuova cartella chiamata NTFSSecurity nella cartella C:\Users\XXXX\Documents\WindowsPowerShell\Modules\NTFSSecurity, doveXXXXè il tuo nome utente Windows. Esempio: se il mio nome utente fosse "aspnyc", la nuova cartella sarebbe C:\Users\aspnyc\Documents\WindowsPowerShell\Modules\NTFSSecurity.

  2. Scarica il pacchetto File System Security PowerShell Module - dovrebbe essere disponibile come un semplice file Zip.

  3. Aprire una console di PowerShell, eseguire Get-Module -ListAvailable e assicurarsi che NTFSSecurity mostri da qualche parte nell'elenco dei moduli registrati.
  4. Nella console di PowerShell, eseguire Import-Module NTFSSecurity .
  5. Nella console di PowerShell, esegui Rimuovi-Item2 "YYYY" -Recurse , doveYYYYè il percorso di Windows della cartella che vuoi eliminare in modo ricorsivo (ad es. C:\Patate\Badgers\FolderToDelete).
0
Mass Dot Net

Alla fine ho scoperto come farlo con Powershell su Windows 10, dove i nomi dei file individuali erano troppo lunghi. Ecco i passaggi che ho seguito per far funzionare tutto questo su Windows 10:

  1. Scarica il pacchetto File System Security PowerShell Module - dovrebbe essere disponibile come un semplice file Zip.
  2. Estrarre il file Zip come cartella NTFSSecurity nella directory C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules.
  3. Aprire una console PowerShell con l'elevazione amministrativa (a.k.a. Modalità amministratore) ed eseguire Modulo Get -ListAvailable e assicurarsi che NTFSSecurity si presenti da qualche parte nell'elenco dei moduli registrati.
  4. Esegui Set-ExecutionPolicy Unrestricted per ignorare la modalità di esecuzione firmata. Devi confermare questa azione con una Y (es)
  5. Eventualmente accedere alla cartella che si desidera eliminare.
  6. Nella console di PowerShell, eseguire Import-Module NTFSSecurity .
  7. Nella console di PowerShell, eseguire Remove-Item2 "YYYY" -Recurse , doveYYYYè il percorso relativo o assoluto di Windows alla cartella che si desidera eliminare in modo ricorsivo (ad es. C:\Potatoes\Badgers\FolderToDelete).
  8. Controlla se ha funzionato.
  9. Alla fine tornare alla modalità di esecuzione firmata con Set-ExecutionPolicy Restricted . Devi confermare questa azione con Y (es).
0
Epicurist

Se hai installato Bash su Ubuntu su Windows, puoi scriverlo nella directory superiore in un normale comando Prompt e digitare:

bash -c "rm -rf dirname_here"

Che lancia bash, cancella in modo ricorsivo la directory da Linux in cui non ci sono restrizioni sui nomi dei file, e quindi torna al normale comando Prompt.

0
Richard Szalay