我有一个目录,其中包含 Windows 2008 服务器上某些子目录中的约 300 万个文件。在根目录中通过 SHIFT+DEL 手动删除文件需要很长时间。还有其他方法可以在快点方式?
答案1
警告: 如果您有指向目录的符号链接,del
则将删除实际目录而不是符号链接。请非常小心,除非您知道目标目录中没有符号链接,否则不要运行这些命令。
我经常需要从 WinXP 加密驱动器中删除大量文件和目录,通常 45,000 个文件夹中有 500,000 个文件,大小约为 22 GB。
使用 Windows 资源管理器删除文件很麻烦,因为它会浪费大量时间来枚举文件。我通常将需要删除的内容移动到 C:\stufftodelete,并将 deletestuff.bat 批处理文件保存到rmdir /s/q C:\stufftodelete
。它计划在晚上运行,但有时我需要在白天运行它,因此越快越好。
这是对 303 个文件夹中 960 个文件(大小为 5.85 MB)的小样本进行快速测试的结果。我先运行方法 1,然后运行方法 2,最后重置测试目录。
方法 1 一次性删除文件和目录结构:
rmdir /s/q foldername
方法 2 首先删除文件并输出到 nul,以避免为每个单个文件写入屏幕的开销。然后,第二遍清理剩余的目录结构:
del /f/s/q foldername > nul
rmdir /s/q foldername
- 方法一:17.5s、14.9s、13.9s、14.8s、13.8s:平均值14.98 秒
- 方法2:14.3s、12.1s、11.7s、14.2s、11.8s:平均值12.82 秒
以下是另一项测试的结果,测试内容是使用 3,243 个文件夹中的 404 MB 共 19,521 个文件:
- 方法 1:2 分 20 秒
- 方法 2:2 分 33 秒
所以,其中并没有太多值得讨论的内容,可能仅通过一次测试无法判断。
编辑:我用更多的数据重新测试了,这对我来说是一个典型的情况:146,918 个文件夹中的 1,159,211 个文件共 28.3 GB:
- 方法 1:2小时15分钟,2小时34分钟:平均:2 小时 25 分钟
- 方法2:49m,57m:平均:53分钟
哇,方法 2 比方法 1 快了近三倍!我会更新我的 deletestuff.bat!
答案2
如果您必须定期删除大型目录树,请考虑将该目录树的根存储在单独的分区上,然后在需要删除所有内容时只需快速格式化它即可。如果您需要自动执行此操作,可以使用此 DOS 命令:
echo Y | format Z: /FS:NTFS /X /Q
其中 Z: 是您的“易失性”分区。注意:分区必须没有标签。我对此进行了博客介绍这里。
答案3
在命令提示符下(开始 -> 运行 -> cmd
):
del /f /s /q foldername
答案4
我创建了一个具有同样功能的 bat 文件。
@echo off
echo --------------------WARNING--------------------
echo folder "%~1" will be deleted
echo --------------------WARNING--------------------
pause
echo Deleting folder: "%~1".
time /T
del /f/s/q "%~1" >nul
rmdir /s/q "%~1" >nul
echo Done.
time /T
echo --- Taking ownership.
takeown /f "%~1" /r /d y >nul
icacls "%~1" /reset /t >nul
icacls "%~1" /setowner "%username%" /t >nul
echo Done all.
time /T
它分两步进行工作,第一步,尝试删除文件。第二步,尝试获取文件的所有权。 是应根据您的本地情况进行更改(英文中代表 yes)。如果任务失败(例如,由于权限问题而失败),则必须再次运行。但是,第二轮不会尝试删除第一轮中删除的文件,因此速度可能相当快。
如何使用。在路径路径下保存为 delfolder.bat(例如 c:\windows),然后以以下方式运行
delfolder "foldername"
其中 foldername 是文件夹的名称
在我的测试中,删除 123,000 个文件需要 3 分钟(sata 7200rpm)。太棒了!