Come eliminare file / sottocartelle in una directory specifica al prompt dei comandi in Windows


308

Supponiamo che vi sia una variabile chiamata %pathtofolder%, poiché chiarisce che è un percorso completo di una cartella.

Voglio eliminare ogni singolo file e sottocartella in questa directory, ma non la directory stessa.

Ma potrebbe esserci un errore come "questo file / cartella è già in uso" ... quando ciò accade, dovrebbe semplicemente continuare e saltare quel file / cartella.

C'è qualche comando per questo?



È pazzesco quanto sia difficile per Windows eliminare le cartelle ... O crearne una che inizia con un punto ... Grazie a Dio per l'integrazione di Bash in Windows! rm -rf path\to\folderfunziona in Windows 10 (o potrebbe provenire da Git Bash ... in entrambi i casi, se hai un tentativo!)
Stijn de Witt,

Risposte:


256

Puoi usare questo script di shell per ripulire la cartella e i file all'interno del C:\Temp sorgente :

del /q "C:\Temp\*"
FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q

Crea un file batch (ad esempio, delete.bat) contenente il comando sopra. Vai alla posizione in cui si trova il file delete.bat ed esegui il comando: delete.bat


20
L'ho provato ma sfortunatamente i file non sono stati eliminati, vengono eliminate solo le sottocartelle. Ad esempio ho una cartella chiamata Test. Contiene 2 cartelle denominate "Ripon" e "Wasim" e contiene un file denominato "riponalwasim.txt". Le sottocartelle Ripon e Wasim sono state eliminate ma riponalwasim.txt non è stato eliminato.
Ripon Al Wasim,

16
Utilizza un singolo segno di percentuale se desideri eseguire direttamente dalla riga di comando, ad es.%p
Alex

2
Triste che questo richieda 2 righe, ma almeno funziona! Sono stanco di cercare un "one-liner" funzionante e andrò con questo, grazie!
nightcoder

2
È possibile utilizzare l'operatore '&&' per eseguire due comandi in una riga senza un file bat (notare il singolo '%' invece di '%%'). del / s / q "myfolder *" && FOR / D% p IN ("myfolder *") DO rmdir "% p" / s / q
ravinsp

<for / F "delims =" %% i in ('dir / b / a-d') do (echo del "%% i" / q)> potrebbe aiutare per i file (basta rimuovere
quell'eco

340

rmdir è il mio comando preferito in assoluto per il lavoro. Funziona per eliminare file e cartelle enormi con sottocartelle. Non viene creato un backup, quindi assicurati di aver copiato i file in modo sicuro prima di eseguire questo comando.

RMDIR "FOLDERNAME" /S /Q

Ciò rimuove silenziosamente la cartella e tutti i file e le sottocartelle.


65
Questo sembra rimuovere la cartella del percorso che l'OP voleva mantenere.
Fuzz Evans,

4
Ciò eliminerebbe la cartella stessa, quindi dovrai aggiungere un altro comando: md FOLDERNAME(vedi la risposta da @rakoczyn di seguito).
thdoan

4
Cosa intendi con "backup creato" qui? Non riesco a vedere nulla che possa creare alcun tipo di backup ...
Paul Groke,

1
La directory non è vuota Il messaggio è arrivato come risposta!
Jamshaid Kamran,

10
Per non rimuovere la cartella stessa, impostarla come directory corrente prima, quindi utilizzare "." come FOLDERNAME. Ricrearlo in seguito non è necessariamente lo stesso perché gli ACL potrebbero andare persi. cd "FOLDERNAME" RD . /S /Q
Moritz entrambi il

85

La soluzione più semplice che mi viene in mente è rimuovere l'intera directory con

RD /S /Q folderPath

Quindi creare nuovamente questa directory:

MD folderPath

5
cosa succede se si autorizza l'eliminazione ma non la creazione di nuove cartelle ?? Spero sia possibile :)
Sandy,

13
Questa è una cattiva soluzione, poiché introduce una corsa sul file system per il nodo della directory, ovvero il secondo comando può fallire se eseguito immediatamente dopo.
Rok Strniša,

22
Inoltre, pessima soluzione se la directory dispone di autorizzazioni speciali, hai appena parlato con ahem (whoops)
Immortal Blue

Non essere scoraggiato dalla risposta: "La directory non è vuota.", Emetti il ​​comando due volte :-)
Kieran Ryan,

1
RD e RMDIR sono lo stesso comando e poiché hai pubblicato questa risposta 9 mesi dopo che qualcuno ha dichiarato la stessa risposta, perché le persone ti danno punti?
Cambia il

51

Ciò rimuoverà le cartelle e i file e lascerà la cartella dietro.

pushd "%pathtofolder%" && (rd /s /q "%pathtofolder%" 2>nul & popd)

4
Per chiunque non sia sicuro di questo approccio: sicuramente non ricrea la directory. Senza 2>nul, genera "Il processo non può accedere al file perché è utilizzato da un altro processo."
Rok Strniša,

6
Odio il fatto che Windows non possa eliminare file e cartelle utilizzati da alcuni programmi. E adoro che tu l'abbia usato a tuo favore in questo one-liner.
andref,

Quindi questa super-magia è come svuotiamo una cartella in Windows ?? Impressionante :)
mlvljr

3
@mlvljr Solo se si desidera conservare anche la cartella principale. RD /?ti mostrerà il modo semplice per svuotare una cartella.
foxidrive,

1
Questo è bello se devi tornare alla tua posizione di partenza, altrimenti CD mypath && RD /S .sarebbe sufficiente. Non mi piace che tu debba ripetere due volte il tuo percorso, per lunghi percorsi diventa difficile da leggere. Quindi vorrei solo aggiungere un set p="mypath"all'inizio.
Amit Naidu,

39
@ECHO OFF

SET THEDIR=path-to-folder

Echo Deleting all files from %THEDIR%
DEL "%THEDIR%\*" /F /Q /A

Echo Deleting all folders from %THEDIR%
FOR /F "eol=| delims=" %%I in ('dir "%THEDIR%\*" /AD /B 2^>nul') do rd /Q /S "%THEDIR%\%%I"
@ECHO Folder deleted.

EXIT

... elimina tutti i file e le cartelle sotto la directory specificata, ma non la directory stessa.


4
questa dovrebbe essere la risposta giusta .. basta fare un semplice file .. deletemyfoldercontents.bat .. pop nel tuo percorso e funziona come un incantesimo ..
timbrown,

3
La riga di comando DEL manca l'opzione /Aper eliminare anche i file con set di attributi nascosti e %dir%\*deve essere racchiusa tra virgolette doppie come "%dir%\*"per funzionare anche per le directory che contengono uno spazio o uno di questi caratteri &()[]{}^=;!'+,`~. E la riga di comando FOR deve essere modificata in for /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I"perché FOR ignora le directory con set di attributi nascosto. DIR con le opzioni /AD /Bgenera tutte le directory con solo i loro nomi. A proposito: dirnon è un buon nome per una variabile d'ambiente.
Mofi,

1
non elimina la sottocartella
RMiranda

1
@RMiranda, nei miei test, fa esattamente come richiesto dall'OP. Hai un caso in cui non elimina le sottocartelle?
thepip3r,

Questa risposta risponde al requisito "potrebbe esserci un errore come 'questo file / cartella è già in uso' ... quando ciò accade, dovrebbe semplicemente continuare e saltare quel file / cartella". ?
Peter Mortensen,

30
CD [Your_Folder]
RMDIR /S /Q .

Riceverai un messaggio di errore, ti dice che il comando RMDIR non può accedere alla cartella corrente, quindi non può eliminarlo.

Aggiornamento :

Da questo utile commento (grazie a Moritz Entrambi ), è possibile aggiungere &&tra, quindi RMDIRnon verrà eseguito se il CDcomando non riesce (ad esempio nome della directory errato):

CD [Your_Folder] && RMDIR /S /Q .

Da riferimento alla riga di comando di Windows :

/ S: elimina un albero di directory (la directory specificata e tutte le sue sottodirectory, inclusi tutti i file).

/ Q: specifica la modalità silenziosa. Non richiede conferma quando si elimina un albero di directory. (Nota che / q funziona solo se è specificato / s.)


1
Questo è perfetto per svuotare la temperatura, ma cd [Your_Folder]è super critico - Dovrò ricordarmelo, quindi non elimino la directory stessa ...
Saggio

5
Questa è la soluzione corretta Aggiungi &&tra i comandi invece dell'interruzione di riga e sei al sicuro da un CD difettoso.
Moritz entrambi il

Questa è una soluzione semplice ed corretta. Funziona anche con la shell dei comandi di Azure!
Philippe,

soluzione piuttosto negativa ... Ad esempio, ho bisogno di questa eliminazione della riga di comando per un aggiornamento svn - Voglio eliminare tutti i file e le cartelle prima di effettuare l'aggiornamento svn perché potrebbero esserci delle modifiche sulla macchina in cui lo uso, ma pertinente sono solo gli elementi registrati. Fare RMDIR / S / Q. rimuove anche il collegamento SVN e quindi non rende più la cartella cartella svn
Dominik Lemberger,

In che modo differisce dalle precedenti quattro risposte?
Peter Mortensen,

9

RD sta per REMOVE Directory.

/ S: elimina tutti i file e le sottocartelle oltre alla cartella stessa. Utilizzare questo per rimuovere un intero albero delle cartelle.

/ Q: Silenzioso: non visualizza la conferma YN

Esempio :

RD /S /Q C:/folder_path/here

1
votato per essere l'unico a spiegare cosa /Se cosa /Qsignifichi
SourceVisor

2
No. rdequivale a rmdire rimuoverà la directory stessa e non è ciò che OP desidera.
WesternGun

Questa risposta risponde al requisito "potrebbe esserci un errore come" questo file / cartella è già in uso "... quando ciò accade, dovrebbe semplicemente continuare e saltare quel file / cartella."? Ad esempio, si interrompe completamente invece di continuare?
Peter Mortensen,

8

Uso Powershell

Remove-Item c:\scripts\* -recurse

Rimuoverà il contenuto della cartella, non la cartella stessa.


La risposta di rhellem è recente, ma è l'unica risposta che lo farà davvero per me. (Win 8.1, non per scelta)
philologon

2
Dalla riga di comando batch:powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Rosberg Linhares,

Si noti che "*" è necessario o rimuoverà la cartella.
mhenry1384,

7

Nessuna delle risposte pubblicate il 01/06/2018, ad eccezione della singola riga di comando pubblicata da foxidrive , ha effettivamente eliminato tutti i file e tutte le cartelle / directory in %PathToFolder%. Questo è il motivo per pubblicare un'altra risposta con una riga di comando singola molto semplice per eliminare tutti i file e le sottocartelle di una cartella, nonché un file batch con una soluzione più complessa che spiega perché tutte le altre risposte pubblicate il 01/06/2018 utilizzando DEL e FOR con RD non è riuscito a ripulire completamente una cartella.


La semplice soluzione a riga di comando singola che ovviamente può essere utilizzata anche in un file batch:

pushd "%PathToFolder%" 2>nul && ( rd /Q /S "%PathToFolder%" 2>nul & popd )

Questa riga di comando contiene tre comandi eseguiti uno dopo l'altro.

Il primo comando PUSHD inserisce nello stack il percorso della directory corrente e successivamente crea %PathToFolder%la directory corrente per l'esecuzione del processo di comando.

Questo funziona anche per i percorsi UNC per impostazione predefinita a causa delle estensioni dei comandi abilitate per impostazione predefinita e in questo caso PUSHD crea una lettera di unità temporanea che punta a quella risorsa di rete specificata e quindi cambia l'unità e la directory correnti, utilizzando la lettera di unità appena definita.

PUSHD restituisce il seguente messaggio di errore per gestire STDERR se la directory specificata non esiste affatto:

Il sistema non può trovare il percorso specificato.

Questo messaggio di errore viene eliminato reindirizzandolo 2>nulal dispositivo NUL .

Il comando successivo RD viene eseguito solo se la modifica della directory corrente per il processo di comando corrente nella directory specificata ha avuto esito positivo, ovvero la directory specificata esiste affatto.

Il comando RD con le opzioni /Qe /Srimuove silenziosamente una directory con tutte le sottodirectory anche se la directory specificata contiene file o cartelle con attributo nascosto o con set di attributi di sola lettura. L'attributo di sistema non impedisce mai l'eliminazione di un file o una cartella.

Non cancellati sono:

  1. Cartelle utilizzate come directory corrente per qualsiasi processo in esecuzione. L'intero albero delle cartelle in tale cartella non può essere eliminato se una cartella viene utilizzata come directory corrente per qualsiasi processo in esecuzione.

  2. File attualmente aperti da qualsiasi processo in esecuzione con autorizzazioni di accesso ai file impostate su file aperto per impedire l'eliminazione del file durante l'apertura dall'applicazione / processo in esecuzione. Tale file aperto impedisce anche l'eliminazione dell'intero albero delle cartelle nel file aperto.

  3. File / cartelle in cui l'utente corrente non dispone delle autorizzazioni necessarie (NTFS) per eliminare il file / cartella che impedisce anche l'eliminazione dell'albero delle cartelle in questo file / cartella.

Il primo motivo per non eliminare una cartella viene utilizzato da questa riga di comando per eliminare tutti i file e le sottocartelle della cartella specificata, ma non la cartella stessa. La cartella viene temporaneamente trasformata nella directory corrente per l'esecuzione del processo di comando che impedisce l'eliminazione della cartella stessa. Ovviamente ciò comporta l'output di un messaggio di errore dal comando RD :

Il processo non può accedere al file perché è utilizzato da un altro processo.

File è il termine sbagliato qui poiché in realtà la cartella viene utilizzata da un altro processo, l'attuale processo di comando che ha eseguito il comando RD . Beh, in realtà, una cartella è per il file system un file speciale con attributo di file directory che spiega questo messaggio di errore. Ma non voglio approfondire troppo la gestione del file system.

Questo messaggio di errore, come tutti gli altri messaggi di errore, che potrebbero verificarsi a causa dei tre motivi sopra descritti, viene eliminato reindirizzandolo con 2>nulda STDERR a dispositivo NUL .

Il terzo comando, POPD , viene eseguito indipendentemente dal valore di uscita del comando RD .

POPD estrae il percorso della directory inviato da PUSHD dallo stack e modifica la directory corrente per l'esecuzione del processo di comando in questa directory, ovvero ripristina la directory corrente iniziale. POPD elimina la lettera di unità temporanea creata da PUSHD nel caso di un percorso di cartella UNC.

Nota: POPD può non riuscire a ripristinare silenziosamente la directory corrente iniziale nel caso in cui la directory corrente iniziale fosse una sottodirectory della directory da ripulire che non esiste più. In questo caso speciale %PathToFolder%rimane la directory corrente. Quindi è consigliabile eseguire la riga di comando sopra non da una sottodirectory di %PathToFolder%.

Un altro fatto interessante : ho provato la riga di comando anche utilizzando un percorso UNC condividendo la directory locale C:\Tempcon il nome di condivisione Tempe utilizzando il percorso UNC \\%COMPUTERNAME%\Temp\CleanTestassegnato alla variabile di ambiente PathToFoldersu Windows 7. Se la directory corrente in esecuzione sulla riga di comando è una sottodirectory di un locale condiviso la cartella a cui si accede tramite il percorso UNC, ovvero C:\Temp\CleanTest\Subfolder1, Subfolder1viene eliminata da RD e il POPD successivo non riesce in modo silenzioso a rendere C:\Temp\CleanTest\Subfolder1nuovamente la directory corrente risultante nel Z:\CleanTestrimanere come directory corrente per il processo di comando in esecuzione. Quindi, in questo caso molto particolare, la lettera di unità temporanea rimane fino a quando la directory corrente non viene modificata, ad esempiocd /D %SystemRoot%in una directory locale realmente esistente. Sfortunatamente POPD non esce con un valore maggiore di 0 se non riesce a ripristinare la directory corrente iniziale rendendo impossibile rilevare questa condizione di errore molto speciale usando solo il codice di uscita di POPD . Tuttavia, si può supporre che nessuno abbia mai incontrato questo caso di errore molto speciale poiché i percorsi UNC di solito non vengono utilizzati per accedere a file e cartelle locali.

Per comprendere ancora meglio i comandi utilizzati, aprire una finestra del prompt dei comandi, eseguire lì i seguenti comandi e leggere con attenzione la guida visualizzata per ciascun comando.

  • pushd /?
  • popd /?
  • rd /?

Una riga con più comandi che utilizzano il file batch di Windows spiega gli operatori &&e &qui utilizzati.


Ora esaminiamo la soluzione di file batch utilizzando il comando DEL per eliminare i file %PathToFolder%e FOR e RD per eliminare le sottocartelle %PathToFolder%.

@echo off
setlocal EnableExtensions DisableDelayedExpansion

rem Clean the folder for temporary files if environment variable
rem PathToFolder is not defined already outside this batch file.
if not defined PathToFolder set "PathToFolder=%TEMP%"

rem Remove all double quotes from folder path.
set "PathToFolder=%PathToFolder:"=%"

rem Consisted the folder path only of double quotes?
if not defined PathToFolder goto EndCleanFolder

rem Remove a backslash at end of folder path.
if "%PathToFolder:~-1%" == "\" set "PathToFolder=%PathToFolder:~0,-1%"

rem Consisted folder path only of a backslash (with one or more double quotes)?
if not defined PathToFolder goto EndCleanFolder

rem Delete all files in specified folder including files with hidden
rem or read-only attribute set, except the files currently opened by
rem a running process which prevents deletion of the file while being
rem opened by the application, or on which the current user has not
rem the required permissions to delete the file.
del /A /F /Q "%PathToFolder%\*" >nul 2>nul

rem Delete all subfolders in specified folder including those with hidden
rem attribute set recursive with all files and subfolders, except folders
rem being the current directory of any running process which prevents the
rem deletion of the folder and all folders above, folders containing a file
rem opened by the application which prevents deletion of the file and the
rem entire folder structure to this file, or on which the current user has
rem not the required permissions to delete a folder or file in folder tree
rem to delete.
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

:EndCleanFolder
endlocal

Il file batch si assicura innanzitutto che la variabile di ambiente PathToFoldersia realmente definita con un percorso di cartella senza virgolette doppie e senza una barra rovesciata alla fine. La barra rovesciata alla fine non sarebbe un problema, ma le doppie virgolette nel percorso di una cartella potrebbero essere problematiche a causa del valore di PathToFolderconcatenato con altre stringhe durante l'esecuzione del file batch.

Importanti sono le due linee:

del /A /F /Q "%PathToFolder%\*" >nul 2>nul
for /F "eol=| delims=" %%I in ('dir "%PathToFolder%\*" /AD /B 2^>nul') do rd /Q /S "%PathToFolder%\%%I" 2>nul

Il comando DEL viene utilizzato per eliminare tutti i file nella directory specificata.

  • L'opzione /Aè necessaria per elaborare realmente tutti i file inclusi i file con l'attributo nascosto che DEL ignorerebbe senza usare l'opzione /A.
  • L'opzione /Fè necessaria per forzare la cancellazione dei file con l'attributo di sola lettura impostato.
  • L'opzione /Qè necessaria per eseguire una cancellazione silenziosa di più file senza richiedere all'utente se è necessario eliminare più file.
  • >nulè necessario reindirizzare l'output dei nomi dei file scritti per gestire STDOUT sul dispositivo NUL di cui non è possibile eliminare perché un file è attualmente aperto o l'utente non ha l'autorizzazione per eliminare il file.
  • 2>nulè necessario reindirizzare l'output del messaggio di errore per ciascun file che non può essere eliminato dall'handle STDERR al dispositivo NUL .

I comandi FOR e RD vengono utilizzati per rimuovere tutte le sottodirectory nella directory specificata. Ma for /Dnon viene utilizzato perché FOR ignora in questo caso le sottodirectory con l'attributo nascosto impostato. Per questo motivo for /Fviene utilizzato per eseguire la seguente riga di comando in un processo di comando separato avviato in background con %ComSpec% /c:

dir "%PathToFolder%\*" /AD /B 2>nul

DIR restituisce in formato non elaborato a causa delle /Bvoci della directory con attributo D, ovvero i nomi di tutte le sottodirectory nella directory specificata indipendenti su altri attributi come l'attributo nascosto senza un percorso. 2>nulviene utilizzato per reindirizzare il messaggio di errore generato da DIR su nessuna directory trovata dall'handle STDERR al dispositivo NUL .

L'operatore di reindirizzamento >deve essere sottoposto a escape con il carattere di inserimento ^, sulla riga comandi FOR per essere interpretato come un carattere letterale quando l'interprete dei comandi di Windows elabora questa riga comandi prima di eseguire il comando FOR che esegue la dirriga comandi incorporata in un processo di comando separato avviato sullo sfondo.

FOR elabora l'output acquisito scritto per gestire STDOUT di un processo di comando avviato che sono i nomi delle sottodirectory senza percorso e mai racchiuse tra virgolette doppie.

FOR con opzione /Fignora le righe vuote che non si verificano qui poiché DIR con l'opzione /Bnon genera righe vuote.

FOR ignorerebbe anche le righe che iniziano con un punto e virgola che è il carattere di fine riga predefinito. Un nome di directory può iniziare con un punto e virgola. Per questo motivo eol=|viene utilizzato per definire il carattere della barra verticale come carattere di fine riga che nessuna directory o file può avere nel suo nome.

FOR dividerebbe la linea in sottostringhe usando lo spazio e la scheda orizzontale come delimitatori e assegnerebbe solo la prima stringa delimitata da spazio / scheda alla variabile loop specificata I. Questo comportamento di divisione non è desiderato qui perché un nome di directory può contenere uno o più spazi. Pertanto delims=viene utilizzato per definire un elenco vuoto di delimitatori per disabilitare il comportamento di divisione delle linee e ottenere assegnato alla variabile loop I, sempre il nome completo della directory.

Il comando FOR esegue il comando RD per ciascun nome di directory senza un percorso, motivo per cui sulla riga di comando RD è necessario specificare nuovamente il percorso della cartella, che è concatenato con il nome della sottocartella.

Per comprendere i comandi utilizzati e il loro funzionamento, aprire una finestra del prompt dei comandi, eseguire lì i seguenti comandi e leggere attentamente tutte le pagine di aiuto visualizzate per ciascun comando.

  • del /?
  • dir /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • rd /?
  • rem /?
  • set /?
  • setlocal /?

5

Utilizzare Blocco note per creare un documento di testo e copiarlo / incollarlo:

rmdir /s/q "%temp%"
mkdir "%temp%"

Seleziona Salva con nome e nome file:

delete_temp.bat

Salva come tipo: tutti i file e fai clic sul Savepulsante.

Funziona su qualsiasi tipo di account (amministratore o utente standard). Eseguilo!

In questo esempio uso una variabile temporanea, ma puoi usarne un'altra! PS: solo per sistema operativo Windows!


una soluzione abbastanza semplice e pulita
Carlos Liu,

4

Per eliminare il file:

del PATH_TO_FILE

Per eliminare la cartella con tutti i file in essa contenuti:

rmdir /s /q PATH_TO_FOLDER

Eliminare tutti i file da una cartella specifica (non eliminare la cartella stessa) è un po 'complicato. del /s *.*impossibile eliminare le 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"

Sì questo è corretto. Devono essere due passaggi. Questo merita più voti, perché spiega perché, rispetto a una risposta più votata sopra.
WesternGun

La riga di comando DEL manca l'opzione /Aper eliminare anche i file con set di attributi nascosto e l'opzione /Fper eliminare anche i file con set di attributi di sola lettura e virgolette doppie attorno all'ultimo argomento. Quindi del /A /F /Q "PATH_TO_FOLDER\*"sarebbe meglio. E la riga di comando FOR deve essere modificata in for /F "eol=| delims=" %%I in ('dir "PATH_TO_FOLDER\*" /AD /B 2^>nul') do rd /Q /S "PATH_TO_FOLDER\%%I"perché FOR ignora le directory con set di attributi nascosto. DIR con le opzioni /AD /Bgenera tutte le directory PATH_TO_FOLDERcon solo i loro nomi.
Mofi,

In che modo differisce da (alcune delle) risposte precedenti?
Peter Mortensen,

4

Puoi farlo utilizzando il seguente comando per eliminare tutto il contenuto e la cartella principale stessa:

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

In cosa differisce dalle precedenti due risposte?
Peter Mortensen,

Questa risposta risponde al requisito "potrebbe esserci un errore come 'questo file / cartella è già in uso' ... quando ciò accade, dovrebbe semplicemente continuare e saltare quel file / cartella". ?
Peter Mortensen,

1

Ho provato molti di questi approcci, ma nessuno ha funzionato correttamente.

Ho trovato questo approccio in due passaggi sul sito della riga di comando di Windows :

forfiles /P %pathtofolder% /M * /C "cmd /c if @isdir==FALSE del @file"

forfiles /P %pathtofolder%  /M * /C "cmd /c if @isdir==TRUE rmdir /S /Q @file"

Ha funzionato esattamente come avevo bisogno e come specificato dall'OP.


Le due righe di comando possono essere combinate in un'unica riga di comando: l' opzione forfiles /P "%pathtofolder%" /M * /C "%SystemRoot%\System32\cmd.exe /C if @isdir==FALSE (del /A /F @file) else rd /Q /S @file" DEL/A viene aggiunta per eliminare anche i file con attributi nascosti impostati, altrimenti DEL genererebbe un messaggio di errore non trovato per ogni file nascosto in %pathtofolder%. L' opzione DEL/F viene aggiunta per eliminare anche i file con l'attributo di sola lettura impostato in %pathtofolder%quanto altrimenti DEL genererebbe un messaggio di errore di accesso negato.
Mofi,

Questa soluzione è la più lenta di tutte le soluzioni incomplete pubblicate qui a causa dell'avvio di cmd.exeun'istanza per ciascun file e ogni directory in %pathtofolder%. Il vantaggio è che FORFILES non ignora le directory con l'attributo nascosto impostato come FOR .
Mofi,

Ri "Ha funzionato esattamente come avevo bisogno e come specificato dall'OP." : Hai verificato il requisito "potrebbe esserci un errore come" questo file / cartella è già in uso "... quando ciò accade, dovrebbe semplicemente continuare e saltare quel file / cartella." ?
Peter Mortensen,

0
@ECHO OFF
rem next line removes all files in temp folder
DEL /A /F /Q /S "%temp%\*.*"
rem next line cleans up the folder's content
FOR /D %%p IN ("%temp%\*.*") DO RD "%%p" /S /Q

La seconda riga rimuoverà i file in ciascun file da tutte le cartelle nella directory temp di Windows e la terza riga pulirà le directory incluso il suo contenuto.
Robie,

La riga di comando FOR deve essere modificata in for /F "eol=| delims=" %%I in ('dir "%TEMP%\*" /AD /B 2^>nul') do rd /Q /S "%TEMP%\%%I"perché FOR ignora le directory con set di attributi nascosto. DIR con le opzioni /AD /Bgenera tutte le directory %TEMP%con solo i loro nomi.
Mofi,

Documentazione per DEL . Penso che tu sia sulla buona strada con / F: "Ignora le impostazioni di sola lettura ed elimina comunque (FORCE)"
Peter Mortensen

-10

Uso:

del %pathtofolder%\*.*   /s /f  /q

Ciò elimina tutti i file e le sottocartelle %pathtofolder%, inclusi i file di sola lettura, e non richiede conferma.


9
Questo mi lascia sottocartelle vuote in% pathtofolder%.
DH

35
NON elimina le sottocartelle in% pathtofolder%. Così male che non ho la reputazione di votare questa falsa risposta
Vitalii Korsakov,

1
Come sottolineato da Vitalii Korsakov, questo elimina tutti i file e le cartelle dalle sottodirectory, ma lascia in posizione le sottodirectory che l'OP ha chiesto di rimuovere.
Fuzz Evans,

6
Sebbene questo comando lasci cartelle vuote, è molto più vicino a quanto richiesto, rispetto alla risposta accettata. Naturalmente questo dipende dalle circostanze. Nel mio caso, preferirei avere cartelle vuote, piuttosto che file lasciati nella directory principale.
MarcusUA,

ma come possiamo eliminare le cartelle e le sottocartelle aperte nella condivisione di rete quando altri computer client aprono l'unità di condivisione con accesso in scrittura a quella cartella. Il comando psfile e net files chiuderà la sessione del file, ma di nuovo dopo pochi secondi creerà automaticamente un'altra sessione per quell'utente nel server ...
user1954762
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.