2011-01-21 18 views
30

Ho la struttura della directory/foo/bar/fooBar/... Voglio scrivere un comando di Windows in cui posso menzionare il percorso fino alla directory foo e cancella tutti i file e la directory ricorsivamente in/foo, ma NON deve cancellare la directory foo.Come eliminare i file in modo ricorsivo

Ho utilizzato rmdir /q /s [path to foo] ma questo comando elimina anche la directory foo. Fammi sapere se c'è qualche comando per farlo.

+0

cosa succede se si cd a/path/to/foo prima di eseguire rmdir? – BigMike

+3

del/s * .xml funziona in Windows 10 – JenonD

+0

Eventuali duplicati di [Che cosa mai è successo a DELTREE, e qual è la sua sostituzione?] (Http://stackoverflow.com/questions/338895/what-ever-happened-to- deltree-e-che cosa è-suo-sostituzione) –

risposta

42
rd /s /q /path/to/foo 
md /path/to/foo 
+0

Avevo un sacco di cartelle e file nidificati con alcuni che erano di sola lettura. Questo ha cancellato tutti tranne la sola lettura, che è quello che mi aspettavo. Ciò era migliore della funzionalità di Windows Server 2003 che arrestava il processo quando incontrava un file di sola lettura. Grazie! –

2

deltree/foo/* dovrebbe funzionare correttamente.

+1

sono la sfortuna di non avere deltree comando su Windows XP – Akshay

+0

Poi si dovrebbe attaccare con @ soluzione di Ferruccio. –

+0

Non funziona in win7 x64 – m1m1k

7
del /f /s /q DirectoryWhichContainsFilesToDelete/\* 

Verranno eliminati tutti i file nella cartella DirectoryWhichContainsFilesToDelete senza eliminare la cartella stessa. Buon divertimento :)

+3

Non elimina ** directory ** all'interno di DirectoryWhichContainsFilesToDelete. –

+0

Questo ha funzionato per i miei scopi. –

1

Ho usato questo in un file batch in passato. Usa un ciclo for per navigare nella struttura delle directory.

Qui rimuovo le sottodirectory cvs da un albero, necessario quando si copia da un ramo a un altro.

@echo off 
if /I exist CVS. rd CVS /s /q >nul 
for /F %%z in ('dir cvs /ad /s /b') do echo %%z && rd /s /q %%z 
echo Batchfile %0 is complete 
6

Mi ero grattato la testa anche su questo. È abbastanza facile creare un ciclo for che usi rmdir, tuttavia lascia dietro cartelle che hanno spazi nei nomi lunghi. È possibile manipolare un elenco di dir e ottenere i nomi di file 8.3, tuttavia qui è una soluzione molto più semplice.

Creare una cartella vuota quindi;

robocopy \empty_folder \folder_with_sub_folders /PURGE 

tutte le sottocartelle & file saranno cancellati.

3

Stavo cercando un comando semplice per eliminare tutti i file in una directory in modo ricorsivo, lasciando invariata la struttura della directory. Quindi, forse questo potrebbe essere interessante;)

for /f "delims=" %i in ('dir /B /S /A:-DH') do @del /F /Q /A:H "%i" 

Il comando 'dir/B/S/A: -D' elenca solo i file (/ A: -D) nella directory corrente in modo ricorsivo (/ S) senza ' rapporto di riepilogo dir (/ B). Il "for" scorre attraverso ogni riga intera (/ delims =) ed esegue il comando delete, forzato e silenzioso. Inoltre ho usato il flag nascosto (/ H) sia per l'elenco che per la cancellazione di alcuni file misteriosi (ad esempio thumbs.db).

+0

questo ha funzionato anche per me, ho dovuto cancellare alcuni file che corrispondono ad un jolly in modo ricorsivo in tutte le sottocartelle, quindi ho usato 'per "delims ="/ f% i in ('dir/b/ad/s "P: \ Sistemi \ ALPS \ ~ $ PS * "') do @del/F/Q/A: H"% i "' e wow, ha funzionato! –

4
del X /f /s /q 
rd X /s /q 

Questo rimuoverà la directory principale però. rifarlo con

md X 

o crearne una copia.

altrimenti dovrete fare in batch funky

dir X /ad /b 

vi darà un elenco delle sottodirectory immediati di X.si può lavorare fuori il resto

+0

funziona con win7 x64. Grazie! – m1m1k

0

Per evitare la cancellazione della directory foo cercare passare alla directory foo prima della cancellazione, quali:

cd c: \ foo rd/s/qc: \ foo

Questo cancellerà tutti i file e le cartelle sotto pippo ma NON pippo. Un messaggio di errore verrà visualizzato come segue "Il processo non può accedere al file perché è utilizzato da un altro processo."

1

Tenta di utilizzare PowerShell:

powershell -Command "Remove-Item '\foo\*' -Recurse -Force" 
Problemi correlati