Come posso eliminare gli alberi delle directory tramite file batch su Windows 7?


36

Voglio eliminare l'intero contenuto di una cartella specificata su Windows 7 tramite file batch. Il mio problema è che 'del' o 'cancella' cancella solo i file, non le cartelle e 'rmdir' o 'rd' cancella sempre la cartella specificata con il suo contenuto, ma voglio solo cancellare il contenuto, non la cartella stessa . Ho provato il comando ' rmdir /S /Q "C:\Share\*"' che mi ha dato un errore di sintassi.

Qual è il modo corretto per farlo?

Sto lavorando su Windows 7 Professional a 64 bit e ho le autorizzazioni di amministratore.

Risposte:


36

Il file batch dovrà eseguire due comandi, uno per cancellare i file e uno per rimuovere le directory secondarie. Ho assunto la directory che si desidera rimuovere èC:\Share\

Il file batch dovrebbe essere simile al seguente:

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /q cercherà ricorsivamente nella struttura di directory eliminando tutti i file (anche di sola lettura) senza richiedere conferma.

La seconda riga scorre attraverso tutte le sottodirectory (che ora dovrebbero essere vuote) e le rimuove.

A meno di eliminare l'intera cartella e ricrearla (cosa che non credo tu voglia fare a causa delle autorizzazioni?), Questo dovrebbe essere il modo più semplice per pulire la cartella.


Se faccio una piccola correzione qui "per / f %% f" -> "per / f% f", allora funziona bene :) Grazie mille.
Michael K,

6
delnon è necessario. rd/s/qeliminerà sia i file che le sottocartelle.
Grawity,

1
@grawity delè presente principalmente per tutti i file nella cartella principale, tuttavia è possibile rimuovere l'opzione di ricorsione.
Windos,

5
@MichaelK, %% f è per l'uso in file batch,% f per quando si tratta di un singolo comando direttamente alla riga di comando.
Windos,

1
Se uno qualsiasi dei nomi delle sottodirectory contengono spazi, è possibile aggiungere "delims =" per elaborare in modo corretto (per / f "delims =" %% f in ...): Vedere stackoverflow.com/q/5553040/64918
goldPseudo

27
rmdir /s/q C:\Share

Viene visualizzato un "Errore di sintassi" perché rmdiraccetta solo nomi completi, non caratteri jolly. (In cmd.exe, l'espansione jolly è lasciata ai singoli programmi; non tutti lo fanno.)

Se hai molte directory che iniziano con Share..., usa un forciclo.

for /d %f in (C:\Share*) do rmdir /s/q "%f"

3
Non voglio cancellare la cartella condivisa.
Michael K,


2

Che dire ?

rmdir /S /Q "target"
mkdir "target

MODIFICA: ovviamente questa soluzione è applicabile solo quando è possibile tollerare un'assenza momentanea di cartelle.


Ciò eliminerebbe la cartella originale.
Michael K,

@MichaelK Il mio compito è stato in grado di tollerare un'assenza momentanea di cartelle, quindi sono andato con questa soluzione. Ho pensato che fosse più semplice e più leggibile che for /fin casi simili al mio. Volevo solo condividere
Vasilly.Prokopyev il

2
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

Questo non funziona se le sottodirectory contengono altre directory che contengono spazi.

Per far funzionare tutto ciò, avevo bisogno di citare la stringa finale, in questo modo

per / f "delims =" %% f in ('dir / ad / bc: \ share \') do rd / s / q "c: \ share \ %% f"

Apparentemente, questo fa sì che il comando funzioni sulla stringa tra virgolette anziché solo sulla stringa stessa.


0

Vorrei provare questo nella cartella in cui tutte le sottocartelle dovrebbero essere eliminate ma la radice (e i file nella radice) sono lasciati come sono: per / D% v in (*) do rd / s / q% v

for / D corrisponde alle directory e rd / s / q elimina ciascuna alla volta


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.