3

I have a script that runs the command:

del c:\mydir\*.*

Is there a command line switch I can use that will also delete all subfolders in that directory? Thanks!

7 Answers 7

6

If there are files in the C:\mydir directory then you'll need to do both lines. Otherwise, the first line will do what you want:

FOR /D %i IN (C:\mydir\*) DO RD /S /Q "%i"
DEL /Q C:\mydir\*.* 

That preserves the C:\mydir directory.

Edit: David1235 is quite right. If you want to do this in a batch file, you'll need to double-up the "%" in the "FOR ..." line.

It's a little unclear to me why David1235's script needs the "pushd" and "popd" when you can specify the path right in the "FOR ..." and "DEL ..." lines, though.

2
  • When I run the first line directly in the command prompt, it works. However, when I copy and paste it into a batch file, I get "\mydir* was unexpected at this time."
    – Mike Cole
    Dec 3, 2009 at 17:27
  • Cancel that... I used the double percent signs and mentioned below. Thanks!!
    – Mike Cole
    Dec 3, 2009 at 17:30
4

If you want to run your script from anywhere, try

@echo off
pushd "C:\mydir"
for /d %%d in (*.*) do rmdir /s /q "%%d"
del /q *.*
popd

In a batch script, you need the double percent signs. From "help for":

To use the FOR command in a batch program, specify %%variable instead
of %variable.  Variable names are case sensitive, so %i is different
from %I.
3
  • Thanks for the hint! I'd give you an upvote but don't have enough rep yet.
    – Mike Cole
    Dec 3, 2009 at 17:31
  • +1 - I'll throw one your way since I didn't think to mention the double-% behaviour in my posting. Dec 3, 2009 at 20:21
  • If you are going to pushd you don't need the for loop, or the del. You can just use rmdir . directly.
    – Amit Naidu
    Jul 9, 2018 at 19:01
1

Is there a reason that:

DEL /Q /S C:\mydir\*

won't work?

1
  • 2
    Because it doesn't delete subfolders.
    – Mike Cole
    Dec 3, 2009 at 17:17
1

Instead of complex FOR...LOOPS etc. I would just use:

c:
cd\mydir
del /q *.* /s 

... but an even faster method is:

rd /q /s c:\mydir

as RD is "remove directory" just as the old DELTREE

1
0

Yes, rmdir.

(hint: rmdir /?)

Edit: You probably want to keep the folder. Try this out in a batch file:

@echo off
rmdir C:\mydir /S
mkdir C:\mydir
4
  • Yes. but I don't want to remove the C:\mydir\ directory itself... just everything underneath.
    – Mike Cole
    Dec 3, 2009 at 15:30
  • Re-edited my post, does this help?
    – pauska
    Dec 3, 2009 at 15:31
  • 1
    I don't want to delete the folder at all. I have special settings/permissions etc set up on it and I don't want to have to recreate those.
    – Mike Cole
    Dec 3, 2009 at 15:31
  • Ah. Then you'll need some more advanced batch scripting, wich I'm not so good at. Others will probably post something :)
    – pauska
    Dec 3, 2009 at 15:35
0

The shortest and simplest way:

CD "%temp%\OrYourPath\" && RD /q /s .

This preserves the parent folder, which may have ACLs that you want to keep. If any of the contents are in use, you will get errors. If you want to silence and ignore those, add a 2>nul at the end.

If you want to remain in the current directory, or have a UNC path, use PUSHD + RD + POPD instead of CD + RD.

-3

i'm using virutal machine with ms dos 6.22. rd command can't have parameters...

to delete c:\folder\folder\folder with files and whatever if you are on c:\ use:

deltree \folder (it will ask for confirmation) deltree \y c:\folder (it will do it right away)

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .