我有一台装有 NTFS 磁盘的 Windows XP 机器,删除大量文件的速度非常慢。如果我在文件夹树中选择一个包含大量文件的文件夹并删除(使用 shift-del 保存回收站),则在弹出确认框之前,删除时间似乎与文件夹中的文件数量成正比。然后删除文件夹中每个文件所需的时间甚至更长。
有没有办法删除 Windows 中的文件夹,并且所花的时间不与文件夹中的文件数量成比例?
答案1
有没有办法删除 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 个文件/15,000 个文件夹:rmdir
耗时 ~2.5 小时,del+rmdir
耗时 ~53 分钟。更多信息这里。
这对我来说是一项常规任务,因此我通常会将需要删除的内容移至 C:\stufftodelete,并将这些del+rmdir
命令放在 deletestuff.bat 批处理文件中。此文件计划在晚上运行,但有时我需要在白天运行,因此越快越好。
答案2
有没有办法删除 Windows 中的文件夹,并且所花的时间不与文件夹中的文件数量成比例?
嗯,是的,格式化分区。我有点惊讶在过去的 9 年里没有人建议这样做。
这是非常激进的,但如果您预计会频繁对特定文件夹执行此操作,则可能值得为其创建一个单独的分区。
如果这太激进,其他答案是你唯一的希望。有一个很好的解释为什么服务器故障。它适用于 Linux 和 XFS 文件系统,但同样的逻辑也适用于此。您无法对内置操作系统功能进行太多改进。
但是,如果您知道要删除的所有文件的路径,则可以省去列出目录内容的调用,直接调用 remove,从而节省一些开销。不过,这仍然与文件数量成正比。
就我个人而言,我喜欢一些进度报告,以确保程序没有死掉。所以我喜欢通过 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:)
答案3
我使用 Hugo 的原始答案创建了一个 .bat 文件,用于删除 NPM 项目。我添加了一个路径变量,只需复制并粘贴一次路径。双击 .bat 文件,它就会完成所有工作 - 无需输入所有内容。
set path_to_delete="FOLDER_PATH"
del /f/s/q %path_to_delete% > nul
rmdir /s/q %path_to_delete%
使用示例:
set path_to_delete="C:\Projects\My React Project"
del /f/s/q %path_to_delete% > nul
rmdir /s/q %path_to_delete%
答案4
在带有 Linux 子系统(基本上是 Ubuntu shell)的较新版本的 Windows 10 上,您可以使用类似 的 Linux 命令rm -rf directory
。这似乎是我的计算机上最快的方法。