Come posso eliminare tutti i file / sottocartelle in una determinata cartella tramite il prompt dei comandi?


42

Vorrei eliminare tutti i file e le sottocartelle in un file batch in Windows 7 e mantenere la cartella principale. Fondamentalmente svuotare la cartella. Qual è l'istruzione della riga di comando per questo?


3
Non per nitpick, ma stai cercando come fare "dal prompt dei comandi" non da "DOS". Non esiste un sottosistema DOS da Win ME.
MDMarra,

@MarkM: Beh, c'è / era ntvdmma poiché i sistemi a 64 bit guadagnano quote di mercato, stanno diventando sempre più irrilevanti.
Joey,

Risposte:


54

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

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

2
la tua è migliore: D +1 - Cancella la mia risposta
BloodPhilia

3
Spiegazione: del sta per Elimina e S sta per Ricorsivo.
Tamara Wijsman,

3
@Tony_Henrich, Ulteriori informazioni sui comandi msdos qui. computerhope.com/msdos.htm
Moab

3
e l'utilizzo di / Q mantiene vuote le sottocartelle indesiderabili.
Tony_Henrich,

2
Questa è la risposta sbagliata e non so perché abbia ricevuto molti voti positivi. Sembra che le persone non abbiano compreso appieno la domanda e non abbiano letto i commenti! Esaminerò le risposte e selezionerò quella corretta.
Tony_Henrich il

22

La migliore soluzione: ad esempio, voglio eliminare tutti i file e le sottodirectory della directory principale, diciamo "C: \ Users \ Desktop \ Nuova cartella \". Il modo più semplice è creare un file batch con tre comandi di seguito.

cd C: \ Users \ Desktop \ Nuova cartella \

del * / S / Q

rmdir / S / Q "C: \ Users \ Desktop \ Nuova cartella \"

Qui prima pulirà tutti i file in tutte le sottodirectory e quindi pulirà tutte le sottodirectory vuote. Poiché la directory di lavoro corrente è la directory principale, ovvero "\ Nuova cartella", il comando rmdir non può eliminare questa directory stessa.


1
Funziona molto bene, ad eccezione di un avviso quando il sistema non è in grado di eliminare la cartella principale.
Jerther,

2
Non bene. Percorsi con codice fisso e guardandolo, non svuota la cartella. Lo rimuove. Molto pericoloso anche. Elimina i file nella cartella corrente se il percorso non viene chiuso o errato.
Tony_Henrich il

Come @Tony_Henrich ha detto che il rmdircomando elimineràNew folder
Nuktu il

No. In realtà questo funziona per cancellare completamente la "Nuova cartella" senza eliminare la cartella stessa. L'unico problema è che fornisce un avviso minore quando il sistema operativo non riesce a eliminare la cartella principale. Inoltre, il comando del è ridondante a meno che non si disponga di una cartella di grandi dimensioni, nel qual caso potrebbe essere più veloce. Potresti semplicemente modificarlo come tale (Mi dispiace per la mancanza di interruzioni di riga nei commenti): imposta FOLDER = "% userprofile% \ Desktop \ Nuova cartella" cd% FOLDER% rmdir / S / Q% FOLDER% \> nul 2> & 1
HSuke,

3
Molto pericoloso. Se qualcuno va avanti e rimuove / rinomina `C: \ Users \ Desktop \ Nuova cartella`, la prima riga con CD fallisce e il tuo file batch cancella felicemente tutto nella directory corrente (predefinita). Che potrebbe benissimo essere la tua directory di lavoro o C: \ Windows \ System32
Ishmaeel,

9

Passare alla directory principale:

pushd "Parent Directory"

Elimina le sottocartelle:

rd /s /q . 2>nul

1
Wow, è un vero trucco. :)
Tarnay Kálmán,

1
Ciò equivale essenzialmente a due risposte precedenti.
Scott,

Concordato con quanto sopra: questa è una copia delle risposte precedenti, sostituita da comandi sinonimo di quelli che stanno sostituendo. pushdnon aggiunge nulla che cdnon stia già facendo.
Hashim,

questo è stato l'unico che sono stato in grado di utilizzare finora che ha funzionato esattamente per quello che chiedeva il richiedente, tutti gli altri hanno semplicemente eliminato tutti i file. Ovviamente rmdir /s path-to-foldereliminerà la cartella con tutte le cose in essa contenute, ma chi desidera sapere come eliminare tutto nella directory di lavoro.
Katz_Katz_Katz

Questa risposta ha funzionato meglio per me. Con tutte le altre risposte non ha eliminato le directory non vuote quando si utilizza / Q e ha sempre chiesto conferma quando non si utilizza / Q.
marijnr,

5
rmdir "c:\pathofyourdirectory" /q /s

Non dimenticare di usare le virgolette e per /q /squesto eliminerà tutti i repository e senza chiedere conferma.


2
La domanda era "Vorrei eliminare tutti i file e le sottocartelle in un file batch in Windows 7 e mantenere la cartella principale " .
Werner Henze,

5

puoi usare rmdir per cancellare i file e la sottocartella, in questo modo:

rmdir /s/q MyFolderPath

Tuttavia, è significativamente più veloce, specialmente quando hai molte sottocartelle nella tua struttura per usare del prima di rmdir, in questo modo:

del /f/s/q MyFolderPath > nul
rmdir /s/q MyFolderPath

La prima opzione fornisce un errore "la directory non è vuota". Il primo comando nella seconda opzione, elimina l'intera cartella. Non lo tiene come volevo. Il secondo comando non è necessario se il primo comando ha eliminato l'intera cartella.
Tony_Henrich il

3

Se desideri eliminare tutti i file in una cartella, comprese tutte le sottocartelle e non fare affidamento su alcune condizioni di errore per mantenere intatta la cartella principale (come ho visto in un'altra risposta) potresti avere un file batch come questo:

@echo off

REM Checking for command line parameter
if "%~1"=="" (

    echo Parameter required.
    exit /b 1

) else (

    REM Change directory and keep track of the previous one
    pushd "%~1"

    if errorlevel 1 (

        REM The directory passed from command line is not valid, stop here.
        exit /b %errorlevel%

    ) else (

        REM First we delete all files, including the ones in the subdirs, without confirmation
        del * /S /Q

        REM Then we delete all the empty subdirs that were left behind
        for /f %%D IN ('dir /b /s /a:d "%~1"') DO rmdir /S /Q "%%D"

        REM Change directory back to the previous one
        popd

        REM All good.
        exit /b 0
    )

)

E poi lo chiameresti semplicemente con:

empty_my_folder.bat "C:\whatever\is\my folder"

3

Puoi farlo rapidamente e facilmente inserendo queste tre istruzioni nel tuo file bat:

mkdir empty_folder
robocopy /mir empty_folder "path_to_directory"
rmdir empty_folder

Questo è immensamente utile poiché rimuove anche qualsiasi file nascosto o di sistema.
weaknespase,

1

Questo ha funzionato meglio per me quando avevo spazi nei nomi delle cartelle.

@echo off
REM ---- Batch file to clean out a folder
REM Checking for command line parameter
if "%~1"=="" (

echo Parameter required.
exit /b 1

) else (
echo ***********************************************************************************
    echo *** Deleting all files, including the ones in the subdirs, without confirmation *** 
    del "%~1\*" /S /Q
echo ***********************************************************************************
    REM Deleting all the empty subdirs that were left behind
FOR /R "%~1" %%D IN (.) DO (
    if "%%D"=="%~1\."  (
    echo *** Cleaning out folder: %~1 *** 
    ) else (
    echo Removed folder "%%D"
    rmdir /S /Q "%%D"
    )
) 

    REM All good.
    exit /b 0

)

Le persone dimenticano sempre di avere spazi nei nomi.
Kevin Panko,

1

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"

Puoi creare uno script per eliminare quello che vuoi (cartella o file) in questo modo 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

0

Questo è ciò che ha funzionato per me.

  1. Naviga all'interno della cartella in cui desideri eliminare i file.
  2. Genere: del *
  3. Y per si.
  4. Fatto
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.