File batch. Elimina tutti i file e le cartelle in una directory


135

Voglio avere un file batch che eliminerà tutte le cartelle e i file nella mia cartella cache per il mio toolkit wireless.

Attualmente ho il seguente:

cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db

Questo eliminerà tutti i file .db nella mia directory RMS , tuttavia voglio eliminare ogni singola cosa da questa directory. Come posso fare questo?


3
Digitare del /?al prompt. Ti fornirà informazioni su come utilizzare lo strumento. In questo caso, del *.* /sfunzionerebbe ma non farlo nella directory sbagliata!
Michael Todd,

35
rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
forsvarir,

Suggerirei ai voti
migliori

5
La risposta di forsvarir rimuove anche la RMSdirectory, che potrebbe non essere quella prevista. (In realtà è spesso ciò che non voglio, perché quindi perdo il timestamp originale della directory e tutte le autorizzazioni che aveva.) Vedi la mia risposta per come rimuovere tutto il contenuto di una directory ma lasciare la directory stessa in posto.
Bill_Stewart,

Risposte:


51

del *.*invece di del *.db. Ciò rimuoverà tutto.


56
Nota: se si desidera ignorare la richiesta "Sei sicuro di voler eliminare ...", devi aggiungere i flag / FQ:del . /F /Q
Rhyuk,

41
questo rimuove solo i file - non le cartelle
icc97

52
Questo non dovrebbe essere contrassegnato come la risposta corretta perché non elimina le cartelle (come indicato nella domanda).
Bill_Stewart,

158

Uso:

  • Crea un file batch

  • Copia il testo seguente nel file batch

    set folder="C:\test"
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
    

Elimina tutti i file e le cartelle.


4
Fantastico, stavo cercando qualcosa per ripulire file e cartelle per un lavoro batch mensile e questo ha funzionato.
Dave Harding,

9
Assicurarsi che la directory esista prima di eseguire questa operazione.
Bill_Stewart,

2
Se hai nomi "speciali" nei nomi dei file, per prima cosa chcp 10000modifica la codifica in UTF-16
Demelziraptor,

3
Voglio solo aggiungere una nota al commento di Bill_Stewart. Il motivo per cui vuoi assicurarti che la directory esista è che, altrimenti, cancellerà qualsiasi directory in cui ti trovi attualmente. Nel mio caso, era il file batch su cui avevo lavorato per oltre 30 minuti. :(
Meno male

2
@vee cambia il ciclo in (rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) per sopprimere i messaggi di errore ed eliminazione
Carl Walsh,

34
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
    rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)

Ciò eliminerà tutto dalla cartella (e dalla cartella stessa).


13
Penso che la domanda riguardi lo svuotamento della directory di tutto il contenuto, ma non l'eliminazione della directory stessa.
Bill_Stewart,

16

del *.*eliminerà solo i file, ma non le sottodirectory. Per cancellare il contenuto di una directory, puoi usare questo script:

@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START

:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE

:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd

:DONE
endlocal

Le pushdmodifiche nella directory di cui si desidera eliminare i bambini. Quindi, quando viene rdrichiesto di eliminare la directory corrente e tutte le directory secondarie, la cancellazione delle directory secondarie ha esito positivo, ma la cancellazione della directory corrente non riesce, perché ci siamo dentro. Questo produce un errore che 2> NULingoia. (2 è il flusso di errori).


6
Sono rimasto perplesso su come ha funzionato per un po ', quindi come spiegazione per gli altri: il pushd si trasforma nella directory di cui vuoi eliminare i bambini. Quindi quando rd chiede di eliminare la directory corrente e tutte le directory secondarie, la cancellazione delle directory secondarie ha esito positivo, ma la cancellazione della directory corrente ha esito negativo, perché ci siamo dentro. Questo produce un errore che ingoia 2> NUL. (2 è il flusso di errori). Signor Stewart molto astuto!
Kinetic

Oh, e "setlocal enableextensions" attiva la possibilità di spingere simultaneamente la directory corrente nello stack e cambiare directory. Questo sembra essere richiesto solo prima di XP, dato che lì e in seguito è impostato su Sì comunque.
Kinetic

Puoi integrare le informazioni dai commenti nella risposta (i commenti possono scomparire in qualsiasi momento)? ( Senza usare le etichette "Modifica:" "Aggiorna:" .)
Peter Mortensen,

12

Ho appena messo insieme questo da ciò che ha pubblicato morty346:

set folder="C:\test"
IF EXIST "%folder%" (
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

Aggiunge un rapido controllo dell'esistenza della cartella definita nella variabile, modifica la directory nella cartella ed elimina il contenuto.


2
Quindi, suggerimento rapido - se si tenta di eseguirlo su un percorso di rete, anche con l'istruzione "IF EXIST", non sarà possibile impostare la cartella e verrà registrata un'istruzione nel prompt cmd "Percorsi UNC non supportati, l'impostazione predefinita è directory di Windows ", tenterà quindi di eliminare tutto dalla directory di Windows. Perciò stai attento.
CBRF23,

11

Puoi farlo usando dele il /Sflag (per dirgli di ricorrere a tutti i file da tutte le sottodirectory):

del /S C:\Path\to\directory\*

Il RD comando può anche essere usato. Elimina in modo ricorsivo silenziosamente senza un prompt:

@RD /S /Q %VAR_PATH%

Rmdir (rd)


5
set "DIR_TO_DELETE=your_path_to_the_folder"

IF EXIST %DIR_TO_DELETE% (
    FOR /D %%p IN ("%DIR_TO_DELETE%\*.*") DO rmdir "%%p" /S /Q
    del %DIR_TO_DELETE%\*.* /F /Q
)

3

Prova quanto segue; per me funziona.

Ho un'applicazione che scarica i dati nella mia cartella "C: \ tmp" e quanto segue funziona meglio per me. Non chiede nemmeno o No per cancellare i dati. Ho fatto un programma per farlo funzionare ogni 5 minuti

cd "C:\tmp"

del *.* /Q

7
Se la cartella "C: \ tmp" non è presente (se tu o qualche altra applicazione hai eliminato quella cartella) e se provi a eseguirla, non cancellerà i dati da un'altra cartella all'interno di "C: \"? (È successo con me)
Vikram l'

4
Come osserva Vikram: 1) Questo è molto pericoloso, e 2) non rimuove le sottodirectory come indicato nella domanda.
Bill_Stewart,

2
Oltre alla cosa delle cartelle ... puoi semplicemente fare del /q c:\tmp\*.*, il che è circa un milione di volte più sicuro. Per non parlare cdcambierà solo il percorso, non guidare.
Nyerguds,

1
Questo è un consiglio terribile. Come altri hanno già detto, puoi finire per eliminare così tanti dati essenziali come risultato di questo. Contrassegnato per la rimozione, penso che sia così male.
RyanfaeScotland,

2

Meglio ancora, diciamo che voglio rimuovere tutto sotto la C:\windows\tempcartella.

@echo off
rd C:\windows\temp /s /q

11
Ciò rimuove la directory c:\windows\temp. Non penso che fosse la domanda originale.
Bill_Stewart,

La rimozione della directory mi sembra più semplice e se dovessi ricrearla in seguito, posso farlo. Un problema potrebbe essere la perdita di autorizzazioni speciali per le cartelle. Tuttavia, questo sembra molto più semplice della maggior parte delle altre risposte.
madannes,

1
Purtroppo, cancellare e ricreare immediatamente dallo script batch sembra dare errori casuali di "accesso negato", su Win10 ...
Nyerguds

2

È possibile utilizzare robocopy per eseguire il mirroring di una cartella vuota sulla cartella che si sta cancellando.

robocopy "C:\temp\empty" "C:\temp\target" /E /MIR

Funziona anche se non riesci a rimuovere o ricreare la cartella attuale.

Richiede una directory vuota esistente.


1
Secondo l'aiuto di robocopy, /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).quindi sono abbastanza sicuro che /Esia ridondante.
Nyerguds,

2

Uso

set dir="Your Folder Path Here"
rmdir /s %dir%
mkdir %dir%

Questa versione cancella senza chiedere:

set dir="Your Folder Here"
rmdir /s /q %dir%
mkdir %dir%

Esempio:

set dir="C:\foo1\foo\foo\foo3"
rmdir /s /q %dir%
mkdir %dir%

Questo chiarirà C:\foo1\foo\foo\foo3.

(Vorrei menzionare la risposta di Abdullah Sabouin . C'è stato un disordine nel copiare me. Non ho notato il suo post. Vorrei ringraziarvi per il melpomene per aver segnalato gli errori!)


Questo non funziona affatto. rmdir fooerrori se foonon è una directory vuota.
melpomene,

@melpomene Ho trovato l'errore e dovrebbe essere risolto !!
TravieDude Minecraft e altri

1
Non intendevo copiare @Abdullah Sabouni in alcun modo. Non devo averlo notato. Mi dispiace.
TravieDude Minecraft e altri

@melpomene Ho dichiarato il mio errore e il mio punto di vista su ciò che è accaduto. Ma ho deciso di non cancellare nel caso in cui fosse di aiuto in ogni caso. Grazie per la segnalazione.
TravieDude Minecraft e altri

@TravieDudeMinecraftandMore +1 - ha funzionato anche per me.
Guy Avraham,

0

Non è possibile cancellare tutto con uno rmdiro delda soli:

  • rmdir /s /qnon accetta i parametri jolly. Quindi rmdir /s /q *errore.
  • del /s /f /q eliminerà tutti i file, ma rimarranno sottodirectory vuote.

La mia soluzione preferita (come ho usato in molti altri file batch) è:

rmdir /s /q . 2>NUL

0

Solo una versione modificata della risposta di GregM :

set folder="C:\test"
cd /D %folder%
if NOT %errorlevel% == 0 (exit /b 1)
echo Entire content of %cd% will be deleted. Press Ctrl-C to abort
pause

REM First the directories /ad option of dir
for /F "delims=" %%i in ('dir /b /ad') do (echo rmdir "%%i" /s/q)

REM Now the files /a-d option of dir
for /F "delims=" %%i in ('dir /b /a-d') do (echo del "%%i" /q)

REM To deactivate simulation mode remove the word 'echo' before 'rmdir' and 'del'.

-1
@echo off
@color 0A

echo Deleting logs

rmdir /S/Q c:\log\

ping 1.1.1.1 -n 5 -w 1000 > nul

echo Adding log folder back

md c:\log\

Eri sulla strada giusta. Basta aggiungere il codice per aggiungere nuovamente la cartella che viene nuovamente eliminata.


1
Non consiglio questa soluzione perché rimuove la directory (perdendo così le sue autorizzazioni) e la ricrea (possibilmente con autorizzazioni diverse).
Bill_Stewart,

-3

È necessario eseguire questo comando per eliminare tutti i file:

del*.*

6
uguale alla risposta accettata dal 26 luglio 11 alle 21:04. Per favore non aggiungere una risposta quando non hai qualcosa di nuovo.
Stephan,

2
Oltre alla critica valida di @Stephan, il comando deve essere del *.*(con uno spazio)
Ty Hitzeman
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.