如何递归删除空文件夹?[重复]


3

这个问题在这里已有答案:

如何递归删除空文件夹?

“空”被认为是如果该目录没有目录的真实,除了无用的自动生成的文件(不存在的文件Thumbs.db.DS_Store等等)


“无用文件”标准使问题复杂化。如果您事先知道目录树中只有不需要的文件,则可以强制进行递归删除。但只有你可以定义什么构成'无用'所以为了使这个动作被推广或自动化,分两步执行它会更安全:首先递归删除所有已知不需要的名称的文件,然后删除目录(没有强制,在在那里有想要的文件)。这变得非常重要,如果我想要那个级别的控制,我会使用脚本或Cygwin。
安德鲁·克拉布

Answers:


5

这是一个命令行one-liner,它将删除文件夹中的每个实际空(即零文件)目录:

for /f "delims=" %i in ('dir /ad /s /b') do @rd "%i"

基本上,这将获得从当前开始的所有目录的递归列表,然后尝试删除每个目录。rd默认情况下,该命令不会删除非空目录,因此您的文件应该是安全的。


我不得不跑这几次。我认为递归是自上而下的。
jozxyqk 2014年

2

试试这个:删除空目录 - CNET Download.com

空目录文件夹很烦人,但通常不是引起极大关注的原因。但是,随着时间的推移,它们会逐渐增加,并且删除空目录是一种智能且快速的解决方案。这个小程序用一个大致空白的窗格和一个图标键来迎接你,以了解你的结果。顶部有一个对话框,用于指定要搜索的特定文件夹或驱动器,但默认情况下会检查您的C驱动器。


这是一个关于使用删除空目录的教程doztech.net/how-tos / ...
BullDozier1337 2010年

不错的网站瑞恩。
Moab 2010年

1

这是我删除一个空目录:

C:\>md f  
C:\>rmdir f  
C:\>  

在那里,我创建了一个,然后将其删除。如果有东西,那么它就不是空的。

你可以使用,rmdir /s如果有的话:

C:\>rmdir f  
The directory is not empty.  

C:\>rmdir /s f  
f, Are you sure (Y/N)? y  

C:\>

如果没有命令提示符,您可以完成所有操作。

递归是编程中的一个概念。我不认为你的意思。无论是否使用递归实现某些东西,都与你无关,因为毫无疑问你不打算限制自己......而且你不仅仅是在理智上对实现感到好奇。

如果您在删除目录时遇到问题,那么请考虑一下,当您尝试删除难以删除的目录时,会出现什么错误。您可以随时启动Live CD并将其删除。


看起来像摩押和可能velio想出你想做什么。扫描硬盘驱动器,搜索空目录或带有少量垃圾窗口文件的目录,以便删除它们。我猜这是节省空间的一种方式;-)
barlop 2010年

实际上在某些操作系统上,术语“递归地”用于目录删除。例如着名的rm -rf。
AndrejaKo 2010年

@AndrejaKo我知道rm -rf和recursive ..我也记得那个,我很确定在rm情况下实现是递归的。
barlop 2011年

我看到velio和moab想出你想做什么(这不是我想的)。真的,你可以在没有重新定义空字的情况下问你的问题。它已经具有明显的含义并与英语共享,甚至rmdir使用该术语。你的问题真的需要重写
barlop


0

使用“ 开始/运行”命令提示符(或组合WindowsR)。写入cmd以启动控制台,然后通过输入驱动器号导航到目录所在的驱动器(例如,如果它们在D:\您放置d:)。

命令行的路径将更改为所需的路径。然后使用该命令cd前往空目录父文件夹(cd D:\ParentDirectory\)。您可以使用Tabfor Windows来放置整个路径。

一旦到达父目录使用

del /F EmptyDirectory1

此方法是最好的方法,也将删除Windows资源管理器无法删除的文件夹或文件。


2
答案如同打哈欠值得这样,我有点不愿意纠正你。如果他在打开命令提示时遇到问题,他可以就此问一个问题。但这实际上是针对“超级用户”,因此您可以假设他们可以打开命令提示符,如果他们不能,他们可以询问。否则就没有尽头了。移动鼠标,移动鼠标。在您的回答中,DEL不会删除目录。
barlop 2010年

0

for /f "delims=" %i in ('dir /ad /s /b') do @rd "%i"

  - bobbymcr

@bobbymcr的答案有效,但是需要运行(n-1)次最大目录深度才能确定没有空目录。这是因为for将按rd降序排序的feed 目录dir列出它们,尝试删除父目录,然后再解除其子目录。

因为rd只会删除已经为sort的子目录,所以将在一次通过中从树中删除空巢。

创建一个[meow].bat文件,然后从要修剪的目录中运行它。第一个并发器是备用的临时文件名,如果需要可以使用。

:: Asserts the default tempfile name if none is specified.
IF "%1"=="" (
set __tempfile=meow.tmp
) ELSE (
set __tempfile=%1
)
echo %__tempfile%

:: Checks to see that it won't destroy an existing file
IF NOT EXIST %__tempfile% (
:: Gets list of directories in descending depth.
dir /ad /b /s > %__tempfile%
:: Removes empty directories specified in the list sorted in reverse order
for /f "delims=" %%i in ('sort /R %__tempfile%') do @rd "%%i"
:: Deletes tempfile
del %__tempfile%
) ELSE (
:: if the tempfile already exists.
@ECHO Tempfile already exists, please delete %__tempfile% and try again.
)
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.