递归删除Windows中的空目录

moh*_*sen 118 windows command-line

我的 Windows 7 机器上有一个目录,它有数百个甚至数千个子目录。其中一些有文件,有些没有。我想删除所有空目录。

查看 del 和 rmdir DOS 命令,您似乎无法在不删除所有文件的情况下递归执行此操作。有没有办法从命令行执行此操作?

cal*_*ban 139

您可以使用删除空目录实用程序。

或者,您可以使用此单行批处理文件(来自DownloadSquad):

for /f "delims=" %d in ('dir /s /b /ad ^| sort /r') do rd "%d"
Run Code Online (Sandbox Code Playgroud)

(如果在批处理文件中使用,请替换%d%%d

这是有效的,因为rd不会删除包含文件的目录。

  • PS 我建议您先尝试基于 GUI 的工具,然后再尝试任何可能删除所有文件的命令行命令。 (9认同)
  • for /f %d in ('dir /s/b') do rmdir "%d" 应该可以工作,因为 rmdir 不能删除非空文件夹 (9认同)
  • 只是一个警告,这个脚本也会破坏目录连接。我经过惨痛的教训才学到这个。 (3认同)

Var*_*rma 81

您也可以使用 ROBOCOPY。它非常简单,也可用于删除大型层次结构中的空文件夹。

ROBOCOPY folder1 folder1 /S /MOVE
Run Code Online (Sandbox Code Playgroud)

这里的源和目标都是folder1,因为您只需要删除空文件夹,而不是将其他文件移动到不同的文件夹。/S选项是跳过复制(在上述情况下移动)空文件夹。由于文件在同一驱动器内移动,因此速度也更快。

  • @Arjan 我已经对其进行了测试,并且效果很好!要了解它的工作原理,就像将所有文件移动到不同的位置,除了空文件夹,然后删除剩下的空文件夹。`/MOVE` 先复制文件,复制后删除源文件。因此,当使用`/S` 时,它将非空文件夹复制到目的地(与上述情况相同的文件夹)。然后,它删除空文件夹(例如,它认为空文件夹已被复制)。不,它**不会**将嵌套文件夹移动到 `folder1` 中,因为 ROBOCOPY 会递归移动文件夹。 (4认同)
  • 它甚至适用于 UNC 路径(至少在 win7 上)!杰出的 ! (4认同)
  • 魔法。所以这会将所有非空文件夹移动到它们已经在的相同位置(什么都不做?),并跳过空文件夹?但是:为什么跳过它们会导致删除?这不会将嵌套文件夹移动到 `folder1` 中吗?可怕,除非测试良好。 (3认同)
  • 这是一个非常优雅的解决方案,不需要任何第三方软件。谢谢! (3认同)
  • 这只是发挥了它的魔力并且完美地工作。谢谢! (2认同)
  • 这是太棒了。一些注释;首先,这正确解决了所报告的已接受答案的问题,其中仅包含空目录的目录不会被删除。在这种方法中修复并不简单,因为它需要以“深度优先顺序”进行删除。这种“robocopy”技术可以完全删除任何深度的空结构。其次,值得一提的是,“robocopy”*实际上没有移动*任何文件。当然,这对于性能很重要,但这也意味着不会不必要地更改或记录 NTFS 文件标识符 (FRN) 编号或 USN 日志。 (2认同)

小智 18

由于 Cygwin 带有 GNU find,因此您可以执行以下操作:

find . -type d -empty -delete
Run Code Online (Sandbox Code Playgroud)

或者为了避免文件夹不再存在时的噪音:

find . -type d -empty -execdir rmdir {} +
Run Code Online (Sandbox Code Playgroud)


Rob*_*Kam 7

免费实用程序EmptyFolderNuker从您选择的基本文件夹中可以很好地完成这项工作。它还删除那些仅包含空子目录的目录。


Dan*_*dor 7

嗯...也许更简单的解决方案:

for /d /r %d in (*.*) do rd "%d"

从您想要删除空文件夹的文件夹开始。

/d - 将适用于文件夹,而不是文件 /r - 将递归子目录