我有一个装有NTFS磁盘的Windows XP机器,删除大量文件非常慢。如果我在文件夹树中选择一个包含大量文件的文件夹并删除(使用shift-del保存回收站),则花费的时间似乎与该文件夹中的文件数量成正比,甚至还要弹出确认框。然后,需要更长的时间才能删除文件夹中的每个文件。
有没有一种方法可以删除Windows中的文件夹,而时间却不与其中的文件数量成比例?
我有一个装有NTFS磁盘的Windows XP机器,删除大量文件非常慢。如果我在文件夹树中选择一个包含大量文件的文件夹并删除(使用shift-del保存回收站),则花费的时间似乎与该文件夹中的文件数量成正比,甚至还要弹出确认框。然后,需要更长的时间才能删除文件夹中的每个文件。
有没有一种方法可以删除Windows中的文件夹,而时间却不与其中的文件数量成比例?
Answers:
有没有一种方法可以删除Windows中的文件夹,而时间却不与其中的文件数量成比例?
我不这么认为,但是某些方法显然比其他方法快得多。
最糟糕的方法是发送到回收站:您仍然需要删除它们。下一个最糟糕的情况是Windows资源管理器中的shift + delete:在开始删除任何内容之前浪费时间检查内容。
下一个最好的方法是rmdir /s/q foldername
从命令行使用。del /f/s/q foldername
也很好,但是它留下了目录结构。
我发现最好的是两行批处理文件,其中第一遍是删除文件并输出到nul以避免为每个单一文件写入屏幕的开销。然后第二遍清理剩余的目录结构:
del /f/s/q foldername > nul
rmdir /s/q foldername
根据使用Windows XP加密磁盘进行的时间测试,这大约比单个rmdir快三倍,删除〜30GB / 1,000,000个文件/1.5万个文件夹:rmdir
耗时约2.5小时,del+rmdir
耗时约53分钟。更多信息在这里。
这对我来说是一项常规任务,因此我通常将需要删除的内容移动到C:\ stufftodelete,并将这些del+rmdir
命令放在deletestuff.bat批处理文件中。该程序计划在晚上运行,但有时我需要在白天运行,因此越快越好。
> nul
有没有一种方法可以删除Windows中的文件夹,而时间却不与其中的文件数量成比例?
好吧,是的,格式化分区。令我有些惊讶的是,在过去的9年中没有人提出这一建议。
这非常激进,但是如果您期望对特定文件夹频繁执行此操作,则值得为它创建一个单独的分区。
如果这太激进了,那么其他答案就是您唯一的希望。有一个很好的解释为什么会出现serverfault。它适用于linux和XFS文件系统,但此处适用相同的逻辑。您无法对内置OS功能进行太多改进。
但是,如果您知道要删除的所有文件的路径,则可以保存列出目录内容的呼叫,并直接删除呼叫,从而节省一些开销。虽然仍然与文件数成正比。
就个人而言,我喜欢进度报告中的一些内容,以确保自己程序不会死。所以我喜欢通过python删除东西。例如,如果所有文件都位于一个没有子目录的目录中:
import tqdm
import sys
import os
location = sys.argv[1]
directory = os.fsencode(location)
with os.scandir(directory) as it:
for dir_entry in tqdm.tqdm(it):
try:
os.remove(dir_entry.path)
except OSError:
pass # was not a file
这会删除我12岁的SEAGATE ST3250620NS上的约250个文件/秒。我认为它将在您的驱动器上更快。
但是,这只是微优化,因此除非您在一个目录中拥有数百万个文件,否则不会做太多事情。(像我一样,哈哈,我做了D :)
我发现具有几层目录的文件夹实际上会减慢Window迅速删除它们的能力。我正在做一个项目,该项目花了5个级别才能到达node_modules文件夹,即使删除该文件夹也总是一个野兽
del /f/s/q foldername > nul
rmdir /s/q foldername
在这种情况下,我最终要做的是导航到node_modules文件夹或具有最高级别的目录,然后一次开始选择并删除大约十二个目录。如果执行多个删除操作,这将迫使回收站在并行进程中工作,而不是在我认为它使用的单个线程中工作,从而极大地加快了进程。
当我最深的目录为空时,我会上几个级别并执行相同的操作。这使删除工作减少了,这使我花了一个多小时才几分钟。
这是一个非常手动的过程,可能会成功编写脚本,但这对我有用
您是否尝试使用命令提示符
rmdir /s /q foldername
GUI中的所有大文件操作都很慢-主要是因为视觉反馈(进度条)必须重绘多次