在Windows上以递归方式删除目录的内容

时间:2011-02-24 17:50:16

标签: windows shell batch-file

我需要删除目录的全部内容(嵌套文件夹和所有内容)而不删除目录本身。在事实之后重新创建目录不是一个选项,因为它正在被正在运行的进程锁定并且删除它会失败。

到目前为止,我有以下内容:

rd /s /q dir1
rd /s /q dir2
rd /s /q dir3
del /q /f *

它可以工作,但显而易见的问题是每次第一级目录集更改时我都必须更新此脚本。

在UNIX上,我会这样解决:

rm -rf *

什么是Windows等价物?

2 个答案:

答案 0 :(得分:15)

假设您正在从顶级目录执行命令:

for /d %X in (*.*) do rd /s /q %X

如果从脚本执行此操作,则必须使用双百分号:

for /d %%X in (*.*) do rd /s /q %%X

如果您还需要删除顶级目录中的文件,请将其添加到脚本中:

del /q /f *

答案 1 :(得分:2)

我知道这是一个陈旧的问题,旧的答案,但我找到了一种更简单的方法来做到这一点并想到分享它。

您可以进入目标目录并使用rd命令。由于Windows不允许您删除当前正在使用的任何文件或目录,并且您通过插入目标目录来使用目标目录,因此您将删除目标目录本身以外的所有内容。

cd mydir
rd /s /q .

你会收到一条消息:

  

该进程无法访问该文件,因为该文件正由另一个进程使用。

在删除所有内容后,rd命令无法删除当前目录时会发生这种情况,因为您已经站在其中。但如果您回显最后一个退出代码,那么您将看到这不是实际错误,该代码将为0

echo %errorlevel%
0

这是我正在使用的,它运作正常。我希望这会有所帮助。