Domanda

Ho bisogno di un modo per eliminare ricorsivamente una cartella e i suoi figli.

Esiste uno strumento predefinito per questo o devo scriverne uno?

DEL /S non elimina le directory.

DELTREE è stato rimosso da Windows 2000+

È stato utile?

Soluzione

RMDIR o RD se stai utilizzando il classico prompt dei comandi (cmd.exe):

rd /s /q "path"

Se stai usando PowerShell puoi usare Remove-Item (che è alias a del, erase, rd, ri, rm E rmdir) e prende a -Recurse argomento che può essere abbreviato -r

rd -r "path"

Altri suggerimenti

amministratore:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

Funziona con qualsiasi cosa, inclusi i file sys

MODIFICARE:In realtà ho trovato il modo migliore che risolve anche il problema del percorso del file troppo lungo:

mkdir \empty
robocopy /mir \empty folder

RMDIR [/S] [/Q] [drive:]path

RD [/S] [/Q] [drive:]path

  • /S Rimuove tutte le directory e i file nella directory specificata oltre alla directory stessa. Utilizzato per rimuovere un albero di directory.

  • /Q Modalità silenziosa, non chiedere se è possibile rimuovere un albero di directory con /S

Puoi installare Cygwin, che ha rm così come ls eccetera.

Vai al percorso e attiva questo comando.

rd /s /q "FOLDER_NAME"

/S :Rimuove la directory specificata e tutte le sottodirectory inclusi eventuali file.Usa /s per rimuovere un albero.

/Q :Esegue rmdir in modalità silenziosa.Elimina le directory senza conferma.

/?:Visualizza la guida al prompt dei comandi.

Per eliminare una directory (che esista o meno) utilizzare quanto segue:

if exist myfolder ( rmdir /s/q myfolder )

rmdir /S /Q %DIRNAME%

rmdir /s dirnome

Prova questo comando:

del /s foldername

Per prima cosa, esaminiamo cosa rm -rf fa:

C:\Users\ohnob\things>touch stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>mkdir stuff.txt

C:\Users\ohnob\things>rm -rf stuff.txt

C:\Users\ohnob\things>ls -l
total 0

C:\Users\ohnob\things>rm -rf stuff.txt

Ci sono tre scenari in cui rm -rf è comunemente usato dove è previsto il ritorno 0:

  1. Il percorso specificato non esiste.
  2. Il percorso specificato esiste ed è una directory.
  3. Il percorso specificato esiste ed è un file.

Ignorerò l'intera faccenda delle autorizzazioni, ma nessuno usa le autorizzazioni o cerca comunque di negarsi l'accesso in scrittura su cose in Windows (OK, voleva essere uno scherzo...).

Primo impostato ERRORLEVEL a 0 e poi cancellare il percorso solo se esiste, utilizzando comandi diversi a seconda che si tratti o meno di una directory. IF EXIST non imposta ERRORLEVEL a 0 se il percorso non esiste, quindi impostando il file ERRORLEVEL prima è necessario impostare su 0 per rilevare correttamente il successo in un modo che imiti il ​​normale rm -rf utilizzo.A guardia del RD con IF EXIST è necessario perché RD, a differenza di rm -f, genererà un errore se la destinazione non esiste.

Il seguente frammento di script presuppone che DELPATH sia preceduto da virgolette.(Questo è sicuro quando fai qualcosa del genere SET DELPATH=%1.Prova a mettere ECHO %1 in un .cmd e passandogli un argomento con degli spazi e guarda tu stesso cosa succede).Una volta completato lo snippet, puoi verificare eventuali errori con IF ERRORLEVEL 1.

: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%

Il punto è che tutto è più semplice quando l'ambiente è semplicemente conforme a POSIX.Oppure se installi un MSYS minimo e lo usi semplicemente.

Puoi installare GnuWin32 e utilizzare i comandi *nix in modo nativo su Windows.Lo installo prima di installare qualsiasi altra cosa su una nuova copia di Windows.:)

Ecco cosa devi fare...

Creare un file batch con la seguente riga

RMDIR /S %1

Salva il file batch con nome Remove.bat e inserirlo C:\windows

Crea la seguente chiave di registro

HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)

Lancio regedit e aggiornare il valore predefinito HKEY_CLASSES_ROOT\Directory\shell\Remove Directory (RMDIR)\defaultcon il seguente valore

"c:\windows\REMOVE.bat" "%1"

Questo è tutto!Ora puoi fare clic con il pulsante destro del mouse su qualsiasi directory e utilizzare la funzione RMDIR

Utilizzo di PowerShell 5.1

 get-childitem *logs* -path .\ -directory -recurse | remove-item -confirm:$false -recurse -force

Sostituire registri con il nome della directory che desideri eliminare.

get-childitem cerca ricorsivamente la directory children con il nome dal percorso corrente (.).

Rimuovi oggetto cancella il risultato.

La risposta accettata è ottima, ma supponendo che tu abbia installato Node, puoi farlo in modo molto più preciso con la libreria del nodo "rimraf", che consente modelli di globbing.Se lo usi molto (lo faccio), installalo a livello globale.

yarn global add rimraf

poi, ad esempio, uno schema che utilizzo costantemente:

rimraf .\**\node_modules

o per una riga che ti consente di evitare l'installazione globale, ma che richiede leggermente più tempo per il download dinamico del pacchetto:

npx rimraf .\**\node_modules

ecco cosa ha funzionato per me:

Prova semplicemente a diminuire la lunghezza del percorso.cioè ::Rinominare tutte le cartelle che portano a tale file con i nomi più piccoli possibili.Di' nomi di una sola lettera.Continua a rinominare verso l'alto nella gerarchia delle cartelle.In questo modo riduci efficacemente la lunghezza del percorso.Ora finalmente prova a eliminare subito il file.

tramite PowerShell

 Remove-Item -Recurse -Force "TestDirectory"

tramite il prompt dei comandi

https://stackoverflow.com/a/35731786/439130

UTILIZZARE A PROPRIO RISCHIO.INFORMAZIONI FORNITE "COSÌ COME SONO".NON TESTATO ESTESA.

Fai clic con il pulsante destro del mouse sull'icona di Windows (solitamente in basso a sinistra) > fai clic su "Windows PowerShell (Admin)" > utilizza questo comando (con la dovuta attenzione, puoi eliminare facilmente tutti i file se non stai attento):

rd -r -include *.* -force somedir

Dove somedir è la directory non vuota che desideri rimuovere.

Tieni presente che con i dischi esterni collegati o i dischi con problemi, Windows a volte si comporta in modo strano: non genera errori nell'eliminazione (o in qualsiasi tentativo di copia), ma la directory non viene eliminata (o non copiata) come indicato.(Ho scoperto che in questo caso, almeno per me, il comando fornito da @n_y nella sua risposta produrrà errori come 'get-childitem :Il file o la directory è corrotto e illeggibile. " come risultato in PowerShell)

C'è anche deltree se utilizzi una versione precedente di Windows.

Mi piace molto questo sito per trovare comandi:SS64:Del - Elimina file

del /s /q directory da eliminare

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top