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?
del /?
at the prompt. It'll give you information in how to use the tool. For this case, del *.* /s
would work but don't do it in the wrong directory! rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
RMS
directory as well, which may not be what was intended. (In fact it is often what I don't want, because then I lose the original timestamp of the directory and any permissions it had.) See my answer for how to remove all of the contents of a directory but leave the directory itself in place. del *.*
instead of del *.db
. That will remove everything.
del . /F /Q
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
del /q c:\tmp\*.*
, which is about a million times safer. Not to mention cd
will only change path, not drive. 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).
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.
chcp 10000
to change encoding to UTF-16 %~dp0
instead of defining %folder%
(rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL )
to suppress the error and deletion messages Better yet, let's say I want to remove everything under the C:\windows\temp
folder.
@echo off
rd C:\windows\temp /s /q
c:\windows\temp
. I don't think that was what the original question was asking. 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).
foo.bat jack&jill
. Best practice for IF
command: if "%~1"=="" goto :HELP
. Best practice for using file and folder paths. PUSHD "%~1"
. foo.bat jack
followed by jill
(because you didn't quote the path). To pass that as a path you would have to quote it anyway (so you don't need "%~1"
). Therefore no code change needed. IF
comparison if the folder name contains an equals symbol. These are not fringe or obscure cases. Best Practice for coding batch files is to always use quotes with string comparisons and file/folder paths. 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.
/MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).
- so I'm fairly sure that /E
is redundant. 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.
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%
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
)
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'.
@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.
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!)
rmdir foo
errors out if foo
is not an empty directory. 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
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.
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 =)
The easiest way is:
WARNING!
THIS DELETES EVERYTHING IN THE FOLDER WHERE IT IS WITHOUT ASKING FOR CONFIRMATION!!!
SO CHOOSE WISELY PLACE FOR SAVING IT.