How do I delete directory trees via batch file on Windows 7?

I want to delete the whole content of a specified folder on Windows 7 via batch file. My problem is, that 'del' or 'erase' only deletes the files, not the folders and 'rmdir' or 'rd' always deletes the specified folder with its content, but I only want to delete the content, not the folder itself. I tried the command 'rmdir /S /Q "C:\Share\*"' which gave me a syntax error.

What is the correct way to do this?

I am working on Windows 7 Professional 64-bit and have admin permissions.

7 Answers

Your batch file will need to run two commands, one to clear out the files then one to remove the child directories. I've assumed the directory you want to remove is C:\Share\

The batch file should look something like this:

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 will recursively search through the directory tree deleting any files (even read only files) without prompting for confirmation.

The second line loops through all the sub directories (which should now be empty) and removes them.

Short of deleting the entire folder and recreating it (which I don't think you want to do due to permissions?) this should be the easiest way to clean the folder out.

6
rmdir /s/q C:\Share

You get a "Syntax error" because rmdir only accepts complete names, not wildcards. (In cmd.exe, wildcard expansion is left to the individual programs; not all of them do.)

If you have many directories starting with Share..., use a for loop.

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

Try this in a command prompt:

rd /s/q "C:\Share"
1

What about ?

rmdir /S /Q "target"
mkdir "target

EDIT: of course this solution applicable only when you can tolerate a momentary folder absence.

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

This does not work if the subdirectories contain other directories that contain spaces.

In order to make this work, I needed to quote the final string, like this

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

Apparently, this causes the command to work on the quoted string instead of just the string itself.

simply:

rmdir /s /q "path"

mkdir "path"

1

I would try this in the folder where all subfolders should be deleted but the root (and files in the root) left as they are: for /D %v in (*) do rd /s/q %v

for /D matches directories and rd/s/q deletes each at a time

0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like