在Windows中,删除一个大文件夹的最快方法是什么?

224

我想要删除一个包含成千上万个文件和文件夹的文件夹。如果我使用Windows资源管理器来删除文件夹,可能需要10-15分钟(不总是这样,但经常发生)。在Windows中是否有更快的方法可以删除文件夹?

其他细节:

  • 我不关心回收站。
  • 这是一个NTFS驱动器。

1
也在Super User上提问了:http://superuser.com/questions/19762/mass-deleting-files-in-windows/289399#289399 - Hugo
1
也许在cygwin中使用rm -rf更快,也许在Linux live cd中使用rm -rf更快。 - barlop
使用Cygwin命令"ls DIRECTORY > list_files"列出目录下的文件列表,然后对列表进行迭代,并使用"rm -rf"命令(处理1TB大文件池并且效果良好)。 - gnuyoga
大家好,我不确定这是否是每个人都有的相同经历...但是如果我删除一个大文件夹,然后在它删除时取消操作,那么文件夹就会消失,回收站也为空。不确定为什么会这样,但对我来说确实有效。 - ladieu
6个回答

1108

最糟糕的方式是发送到回收站:您仍然需要删除它们。其次糟糕的是使用Windows资源管理器中的Shift+Delete:它在开始删除任何内容之前会浪费大量时间检查内容。

下一种最好的方法是使用命令行中的rmdir /s/q foldernamedel /f/s/q foldername也很好,但它会留下目录结构。

我发现最好的方法是使用两行批处理文件。第一遍删除文件并输出到null以避免为每个单个文件写入屏幕的开销。第二遍清理剩余的目录结构:

del /f/s/q foldername > nul
rmdir /s/q foldername

根据在 Windows XP 加密磁盘上删除大小约为 30GB,100 万个文件和 15,000 个文件夹的时间测试显示,del+rmdir 命令比单一的 rmdir 命令快近三倍,前者用时约为 53 分钟,后者用时约为 2.5 小时。更多信息请查看Super User

由于这是我经常要完成的任务,所以我通常将需要删除的内容移至 C:\stufftodelete 并在一个名为 deletestuff.bat 的批处理文件中编写 del+rmdir 命令。该文件会在晚上自动运行,但有时我需要在白天运行它,因此速度越快越好。

del 命令的 Technet 文档可以在此处找到。以上所述参数的详细信息如下:

  • /f - 强制删除(即使文件是只读的也会删除)
  • /s - 递归 / 包括子文件夹(这个定义源自于SS64,因为 Technet 只是简单地说明“指定的文件”,这并没有帮助)。
  • /q - 安静模式(即不提示用户进行确认)

rmdir 命令的文档可以在此处找到。参数如下:

  • /s - 递归(即与 del 的 /s 参数相同)
  • /q - 安静模式(即与 del 的 /q 参数相同)

2
我今天尝试了这个(诚然是在一个较小的数据集上),结果相反:仅使用rmdir比先使用del再使用rmdir快30%(3:17比2:15)。 - Harry Johnston
6
根据驱动器的不同,我需要以“管理员身份运行”才能使其正常工作。 - Eyal
1
@AndroDev 不,这只是为了速度而设计的。进度计算可能是Windows资源管理器变慢的原因之一。 - Hugo
16
一个优秀而优雅的解决方案,我可以建议我们通过使用命令行符号“&”来简化命令:按顺序运行命令:del /f/s/q foldername > nul & rmdir /s/q foldername或者 仅在第一个命令成功时按顺序运行命令。del /f/s/q foldername > nul && rmdir /s/q foldername - GBGOLC
3
附带说明和Shell集成解决方案的好方法在这里:http://mattpilz.com/fastest-way-to-delete-large-folders-windows/ - JohnLBevan
显示剩余17条评论

401

使用Windows命令提示符:

rmdir /s /q folder

使用PowerShell:

powershell -Command "Remove-Item -LiteralPath 'folder' -Force -Recurse"

需要注意的是,在更多情况下,delrmdir命令会留下一些未删除的文件,而Powershell则可以成功删除这些文件。


24
顺便说一句,您还可以使用rd /q/s <文件夹名称>。然而,虽然这比Windows资源管理器中的图形界面更快,但仍需要很长时间 - 微软使用'Schlemeil the Painter'算法(来源于joelonsoftware.com/articles/fog0000000319.html),每当执行dir或del命令时。 - warren
41
如果您安装了Cygwin,那么使用"rm -rf 文件夹"命令可以快速地删除文件夹。 - Sinan Ünür
49
我以前用过这个方法,但是我发现使用 del+rmdir 的组合比单纯使用 rmdir 快近三倍。参见我的回答:https://dev59.com/Z3VC5IYBdhLWcg3wykQt#6208144 - Hugo
3
Sinan建议最快。安装http://www.cygwin.com/,然后在cygwin命令提示符下使用rm -rfv文件夹名称。 - Lonnie Best
7
Windows Git BASH shell 的 rm -fr <folder> 命令也非常快速。 - Martin
显示剩余4条评论

8

使用免费工具FastCopy,它有一个删除选项,比Windows删除文件的方式快得多。


1
我尝试了FastCopy。不确定它是否比Windows更快,我只能删除每秒92个文件。考虑到我放弃计算文件数量超过250K,这将需要我很长时间才能使用。唉,每个文件只有20字节。该死的PHP会话文件。 - Chrispix
3
请尝试使用开源免费工具RapidDeletePro:https://github.com/mhisoft/RapidDeletePro。 - Tony
1
我必须推荐RapidDeletePro。我在呼叫中心环境中工作,所有通话都被记录下来。这导致每天产生几十万个MP3文件和数TB的数据量。因此,在清理文件时,我进行了比较,发现RapidDeletePro是最快的,其次是del /f/s/q folder > nul,但速度慢了大约3倍。 - Tyler W. Cox

6
请使用命令提示符,如建议所示。我一段时间前就已经弄清楚了为什么资源管理器会变得如此缓慢,它会给出删除文件/文件夹所需时间的估计值。为了做到这一点,它必须扫描项目数量和大小。这需要很长时间,因此在处理大文件夹时会出现荒谬的等待。
此外,如果文件存在问题,资源管理器也会停止运行。

2
要删除许多文件夹,您可以创建一个批处理文件,并使用spdenne发布的命令。1)创建一个文本文件,其中包含以下内容,将引号中的文件夹名称替换为您的文件夹名称:
rmdir /s /q "My Apps"  
rmdir /s /q "My Documents"  
rmdir /s /q "My Pictures"  
rmdir /s /q "My Work Files"

2) 将批处理文件保存为.bat格式(例如deletefiles.bat)
3) 打开命令提示符(开始>运行>Cmd),并执行批处理文件。您可以在命令提示符中以以下方式执行此操作(将X替换为您的驱动器号):

X:  
deletefiles.bat

2
是的,我有一个类似的批处理文件,但发现 del+rmdir 的组合最快:https://dev59.com/Z3VC5IYBdhLWcg3wykQt#6208144 - Hugo

-9

尝试使用 Shift + Delete。对我来说,2分钟内处理了24,000个文件。


15
请参考上文 - 避免了回收站,但仍然比命令行慢得多。 - andig
1
该方法将直接删除文件而不是将它们移动到回收站,但资源管理器仍会尝试计算所有文件以获取估计值,对于大型文件夹(> 100k个文件)来说这需要很长时间。 - uceumern
平均文件大小是多少? - chupa_kabra
@your_boy_gorja,问题不在于平均文件大小,而在于文件夹中的文件数量。当您通过资源管理器删除时,资源管理器需要读取所有文件以获取大小并尝试进行估算。 - Vinicius Monteiro
@uceumern 是的,这个计数功能对于一个有很多文件的文件夹来说是荒谬的(一个有100万个文件且大小为40GB的文件夹)。 - Brian Leishman
不说得太多,你必须考虑文件夹结构和文件大小。 - Nikolai Ehrhardt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接