如何在Windows 7上通过批处理文件删除目录树?


36

我想通过批处理文件删除Windows 7上指定文件夹的全部内容。我的问题是,“ del”或“ erase”仅删除文件,而不删除文件夹,“ rmdir”或“ rd”始终删除指定文件夹及其内容,但是我只想删除内容,而不是文件夹本身。我尝试了命令' rmdir /S /Q "C:\Share\*"',这给了我一个语法错误。

正确的方法是什么?

我正在使用Windows 7 Professional 64位,并且具有管理员权限。

Answers:


36

您的批处理文件将需要运行两个命令,一个命令清除文件,然后一个命令删除子目录。我假设您要删除的目录是C:\Share\

批处理文件应如下所示:

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 会在目录树中递归搜索,删除所有文件(甚至只读文件),而不会提示您进行确认。

第二行循环遍历所有子目录(现在应该为空)并删除它们。

只需删除整个文件夹并重新创建它(由于权限我不希望这样做),这应该是清除文件夹的最简单方法。


如果我在这里对“ / f%f”进行了一些更正->“对于/ f%f”,则可以正常工作:)非常感谢。
Michael K

6
del没有必要。rd/s/q将同时删除文件和子文件夹。
grawity 2011年

1
@grawity del主要存在于根文件夹中的所有文件中,但是可以删除递归开关。
Windos

5
@MichaelK,%% f用于批处理文件,%f用于直接进入命令行的单个命令。
Windos

1
如果任何子目录名称包含空格,则可以添加“ delims =“以正确处理它们(对于/ f ” delims =“ %% f in ...):请参阅stackoverflow.com/q/5553040/64918
goldPseudo

27
rmdir /s/q C:\Share

您会收到“语法错误”,因为它rmdir仅接受完整名称,而不接受通配符。(在中cmd.exe,通配符扩展留给各个程序;并非所有程序都可以。)

如果您有许多以开头的目录Share...,请使用for循环。

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

3
我不想删除共享文件夹。
Michael K

12

在命令提示符下尝试以下操作:

rd /s/q "C:\Share"

2
这也删除了父文件夹,而不是文件夹的内容。
Teoman shipahi

2

关于什么 ?

rmdir /S /Q "target"
mkdir "target

编辑:当然,此解决方案仅在您可以容忍瞬时文件夹缺失时才适用。


这将删除原始文件夹。
Michael K

@MichaelK我的任务能够容忍暂时的文件夹缺失,因此我选择了此解决方案。我认为,for /f与类似我的案例相比,它更简单易读。只想分享
Vasilly.Prokopyev,2015年

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

如果子目录包含其他包含空格的目录,则此方法不起作用。

为了使这项工作有效,我需要引用最后一个字符串,如下所示

为/ f“ delims =” %% f in('dir / ad / bc:\ share \'))执行rd / s / q “ c:\ share \ %% f”

显然,这会使命令在加引号的字符串上起作用,而不仅仅是字符串本身。


0

我将在所有子文件夹都应该删除的文件夹中尝试此操作,但根目录(和根目录中的文件)保持原样:对于(*)中的/ D%v,请执行rd / s / q%v

/ D匹配目录,并且rd / s / q一次删除每个目录


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.