2009-10-01 2 views
47

Uso Windows.Come eliminare tutti i file e le cartelle in una cartella tramite chiamata da cmd

Desidero eliminare tutti i file e le cartelle in una cartella tramite chiamata di sistema.

posso chiamare così:

>rd /s /q c:\destination 
>md c:\destination 

Sai un modo più semplice?

+0

http://superuser.com/questions/173859/how-can-i-delete-all-files-subfolders-in-a-given-folder-via-the-command-prompt –

+0

Possibile duplicato di [Che cosa è successo a Deltree, e qual è la sua sostituzione?] (Http://stackoverflow.com/questions/338895/what-ever-happened-to-deltree-and-whats-its-replacement) –

risposta

86

No, non ne conosco uno.

Se si desidera mantenere la directory originale per qualche ragione, e invece vuole veramente per svuotarlo, allora si può fare quanto segue (ACL, & c.):

del /q destination\* 
for /d %x in (destination\*) do @rd /s /q "%x" 

Questa prima rimuove tutti i file dalla directory, quindi rimuove in modo ricorsivo tutte le directory nidificate, ma nel complesso mantenendo la directory di livello superiore così com'è (tranne il suo contenuto).

noti che all'interno di un file batch è necessario raddoppiare la % all'interno del ciclo for:

del /q destination\* 
for /d %%x in (destination\*) do @rd /s /q "%%x" 
+2

è il modo per farlo –

+3

sono stato in grado di farlo senza un file batch. usa && per concat le due operazioni –

+1

Sono un noob completo di windows-shell: come faccio a impostare la destinazione su un percorso con questo esempio? –

18

del c:\destination\*.* /s /q ha lavorato per me. Spero che funzioni anche per te.

+7

Elimina tutti i file ma non le cartelle. – Eric

+1

Ciò che ha funzionato per me era navigare nella cartella. (fai clic con il pulsante destro del mouse, seleziona il prompt di cmd aperto qui) quindi "del *. *" –

8

Se i nomi delle sottocartelle possono contenere spazi, è necessario circondarli in virgolette con escape. L'esempio seguente mostra questo per i comandi utilizzati in un file batch.

set targetdir=c:\example 
del /q %targetdir%\* 
for /d %%x in (%targetdir%\*) do @rd /s /q ^"%%x^" 
1

Una semplice opzione a una linea è quella di creare una directory vuota da qualche parte nel file system, e quindi utilizzare ROBOCOPY (http://technet.microsoft.com/en-us/library/cc733145.aspx) con l'interruttore /MIR per rimuovere tutti i file e sottocartelle. Per impostazione predefinita, robocopy non copia la sicurezza, quindi gli ACL nella cartella principale dovrebbero rimanere intatti.

Inoltre, probabilmente si desidera impostare un valore per il parametro di tentativo, /r, perché il numero predefinito di tentativi è 1 milione.

robocopy "C:\DoNotDelete_UsedByScripts\EmptyFolder" "c:\temp\MyDirectoryToEmpty" /MIR /r:3 
0

Avevo una cartella di indice con 33 cartelle che aveva bisogno di rimuovere tutti i file e le sottocartelle. Aprii una riga di comando nella cartella indice e quindi utilizzato questi comandi:

for /d in (*) do rd /s /q "%a" & (
md "%a") 

li separato in due linee (premi invio dopo la prima linea, e quando chiesto più aggiungere seconda riga) perché se inserito una singola linea questo potrebbe non funzionare. Questo comando cancella ogni directory e quindi ne crea una nuova vuota, rimuovendo quindi tutti i file e i sottocartelle nella directory originale.

15

Penso che il modo più semplice per farlo è:

rmdir /s /q "C:\FolderToNotToDelete\" 

L'ultima "\" nel percorso è la parte importante.

+15

Questo elimina anche la cartella stessa. – Archie

+0

Perfetto, questo è quello che mi serve :) – gNerb

+0

Funziona in modo ricorsivo qual è il percorso troppo lungo? – eomeroff

1

eliminare il file:

del PATH_TO_FILE 

Per eliminare la cartella con tutti i file in essa:

rmdir /s /q PATH_TO_FOLDER 

Per eliminare tutti i file dalla cartella specifica (cartella non eliminazione stesso) è un po 'complicato. del /s *.* non può eliminare cartelle, ma rimuove i file da tutte le sottocartelle. Quindi sono necessari due comandi:

del /q PATH_TO_FOLDER\*.* 
for /d %i in (PATH_TO_FOLDER\*.*) do @rmdir /s /q "%i" 

È possibile creare uno script per eliminare quello che vuoi (cartella o un file) come questo mydel.bat:

@echo off 
setlocal enableextensions 

if "%~1"=="" (
    echo Usage: %0 path 
    exit /b 1 
) 

:: check whether it is folder or file 
set ISDIR=0 
set ATTR=%~a1 
set DIRATTR=%ATTR:~0,1% 
if /i "%DIRATTR%"=="d" set ISDIR=1 

:: Delete folder or file 
if %ISDIR%==1 (rmdir /s /q "%~1") else (del "%~1") 
exit /b %ERRORLEVEL% 

alcuni esempi di utilizzo:

mydel.bat "path\to\folder with spaces" 
mydel.bat path\to\file_or_folder 
4

Sì! Uso PowerShell:

powershell -Command "Remove-Item 'c:\destination\*' -Recurse -Force"