user69514
user69514

Reputation: 27629

Delete all files and folders in a directory

I want to have a batch file that will delete all the folders and files in my cache folder for my wireless toolkit.

Currently I have the following:

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

This will delete all .db files in my RMS directory, however I want to delete every single thing from this directory. How can I do this?

Upvotes: 172

Views: 556036

Answers (18)

Zachary Chiodini
Zachary Chiodini

Reputation: 61

This will first delete all files in the current directory and subdirectories, then it will delete all folders in the current directory and subdirectories.

For command prompt:

del /q /s *
FOR /D %G IN (*) DO rmdir /q /s %G

For batch script:

del /q /s *
FOR /D %%G IN (*) DO rmdir /q /s %%G

This approach is more readable, to me.

Upvotes: 0

Antoine Pelletier
Antoine Pelletier

Reputation: 3316

Easy simple answer :

C:
del /S /Q C:\folderName\otherFolderName\*

C: Important in case you have to switch from D: to C: or C: to D: (or anything else)

/S Recursive, all subfolders are deleted along

/Q If you don't activate quiet mode, prompt will ask you to type y for every subfolders... you don't want that

Be carful, it's drastic.

Upvotes: 1

Michałf
Michałf

Reputation: 11

The easiest way is:

  1. Create *.txt file
  2. Write: rmdir /q /s . dir
  3. Save file as *.bat in folder which you want to clear (you can call the file NUKE.bat)
  4. Turn it on

WARNING!

THIS DELETES EVERYTHING IN THE FOLDER WHERE IT IS WITHOUT ASKING FOR CONFIRMATION!!!

SO CHOOSE WISELY PLACE FOR SAVING IT.

Upvotes: 1

Ihor Drachuk
Ihor Drachuk

Reputation: 1293

I would like to suggest using simple tool like cleardir. So, in batch file you can write:

cleardir path/to/dir

And you'll get empty directory dir. A bit slow, but still resolves the "problem".

I'm an author of the tool =)

Upvotes: 3

Bill_Stewart
Bill_Stewart

Reputation: 24545

del *.* will only delete files, but not subdirectories. To nuke the contents of a directory, you can use this 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

The pushd changes into the directory of which you want to delete the children. Then when rd asks to delete the current directory and all sub directories, the deletion of the sub directories succeed, but the deletion of the current directory fails - because we are in it. This produces an error which 2> NUL swallows. (2 being the error stream).

Upvotes: 18

Use

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

This version deletes without asking:

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

Example:

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

This will clear C:\foo1\foo\foo\foo3.

(I would like to mention Abdullah Sabouin's answer. There was a mix up about me copying him. I did not notice his post. I would like to thank you melpomene for pointing out errors!)

Upvotes: 5

Abdullah Sabouni
Abdullah Sabouni

Reputation: 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\

You was on the right track. Just add code to add the folder which is deleted back again.

Upvotes: -2

grenix
grenix

Reputation: 733

Just a modified version of GregM's answer:

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'.

Upvotes: 0

PodTech.io
PodTech.io

Reputation: 5254

You can do this using del and the /S flag (to tell it to recurse all files from all subdirectories):

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

The RD command can also be used. Recursively delete quietly without a prompt:

@RD /S /Q %VAR_PATH%

Rmdir (rd)

Upvotes: 12

Fantus_Longhorn
Fantus_Longhorn

Reputation: 161

I just put this together from what morty346 posted:

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)
)

It adds a quick check that the folder defined in the variable exists first, changes directory to the folder, and deletes the contents.

Upvotes: 16

Aaron
Aaron

Reputation: 115

You could use robocopy to mirror an empty folder to the folder you are clearing.

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

It also works if you can't remove or recreate the actual folder.

It does require an existing empty directory.

Upvotes: 2

user3788752
user3788752

Reputation: 49

Better yet, let's say I want to remove everything under the C:\windows\temp folder.

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

Upvotes: 3

GregM
GregM

Reputation: 3734

Use:

  • Create a batch file

  • Copy the below text into the batch file

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

It will delete all files and folders.

Upvotes: 191

poorvesh
poorvesh

Reputation: 111

Try the following; it works for me.

I have an application which dumps data in my "C:\tmp" folder, and the following works the best for me. It doesn't even ask Yes or No to delete the data. I have made a schedule for it to run after every 5 minutes

cd "C:\tmp"

del *.* /Q

Upvotes: 3

butfly
butfly

Reputation: 115

You cannot delete everything with either rmdir or del alone:

  • rmdir /s /q does not accept wildcard params. So rmdir /s /q * will error.
  • del /s /f /q will delete all files, but empty subdirectories will remain.

My preferred solution (as I have used in many other batch files) is:

rmdir /s /q . 2>NUL

Upvotes: 1

Cristian Tetic
Cristian Tetic

Reputation: 183

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
)

Upvotes: 7

Jon Martin
Jon Martin

Reputation: 3392

del *.* instead of del *.db. That will remove everything.

Upvotes: 58

infojolt
infojolt

Reputation: 5418

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

This will delete everything from the folder (and the folder itself).

Upvotes: 42

Related Questions