我有一个目录,在 Windows 2008 服务器上的某些子目录中包含约 300 万个文件。在根目录上通过 SHIFT+DEL 手动删除文件需要很长时间。有没有其他方法可以更快地进行删除?
Hug*_*ugo 188
警告: 如果您有指向目录的符号链接,那么del
将删除实际目录而不是符号链接。对此要非常小心,除非您知道目标目录中没有符号链接,否则不要运行这些命令。
我经常需要从 WinXP 加密驱动器中删除大量文件和目录,通常在 45,000 个文件夹中删除大约 22 GB 的 500,000 个文件。
使用 Windows 资源管理器删除是垃圾,因为它浪费了大量时间枚举文件。我通常将需要删除的内容移动到 C:\stufftodelete 并将 deletestuff.bat 批处理文件移动到rmdir /s/q C:\stufftodelete
. 这计划在晚上运行,但有时我需要在白天运行,所以越快越好。
以下是对 303 个文件夹中 960 个文件的 5.85 MB 小样本进行快速时间测试的结果。我先运行方法 1,然后运行方法 2,然后重置测试目录。
方法一将文件和目录结构一次性删除:
rmdir /s/q foldername
Run Code Online (Sandbox Code Playgroud)
方法 2 有第一遍删除文件并输出到 nul 以避免为每个单个文件写入屏幕的开销。然后第二遍清理剩余的目录结构:
del /f/s/q foldername > nul
rmdir /s/q foldername
Run Code Online (Sandbox Code Playgroud)
以下是在 3,243 个文件夹中使用 404 MB 的 19,521 个文件进行的另一项测试的结果:
所以它没有多少,可能太接近了,无法在单个测试中判断。
编辑:我已经重新测试了更多数据,这对我来说是一个典型案例:146,918 个文件夹中有 28.3 GB 的 1,159,211 个文件:
哇,方法 2 比方法 1 快近三倍!我会更新我的deletestuff.bat!
小智 18
如果您必须定期删除大型目录树,请考虑将该目录树的根目录存储在单独的分区中,然后在需要删除所有内容时对其进行快速格式化。如果您需要自动执行此操作,可以使用此 DOS 命令:
echo Y | format Z: /FS:NTFS /X /Q
Run Code Online (Sandbox Code Playgroud)
其中 Z: 是您的“易失性”分区。注意:分区必须没有标签。我在这里写了关于这个的博客。
小智 10
在命令提示符(开始 -> 运行 -> cmd
)中:
del /f /s /q foldername
Run Code Online (Sandbox Code Playgroud)
除了非常快速地复制/移动文件(使用它自己的 API)之外,TeraCopy 还可以删除文件,而且速度也非常快。自从发现 TeraCopy 后,我就不再使用未安装它的计算机(如果我要复制/移动/删除)。
同一个安装程序安装 x64 版本,但要使用它,您必须手动强制它。
我推荐的稳定版本的测试版:http : //blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/
小智 6
我做了一个同样的 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
Run Code Online (Sandbox Code Playgroud)
它分两步完成工作,一是尝试删除文件。第二个是尝试取得文件的所有权。 y应该根据您当地的情况进行更改(在英语中代表 yes)。如果任务失败(例如,如果因为权限而失败),那么您必须再次运行它。但是,第二轮不会尝试删除在第一轮中删除的文件,因此可能会很快。
如何使用它。在路径路径(例如 c:\windows)中另存为 delfolder.bat,然后将其作为
delfolder "foldername"
Run Code Online (Sandbox Code Playgroud)
其中文件夹名称是文件夹的名称
在我的测试中,删除 123'000 个文件需要 3 分钟(sata 7200rpm)。好极了!
使用下面的代码通常对我很有效。
mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
Run Code Online (Sandbox Code Playgroud)