在 Windows 中批量删除文件

149 windows file-management

我有一个目录,在 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)
  • 方法一:17.5s、14.9s、13.9s、14.8s、13.8s:平均14.98秒
  • 方法二:14.3s、12.1s、11.7s、14.2s、11.8s:平均12.82秒

以下是在 3,243 个文件夹中使用 404 MB 的 19,521 个文件进行的另一项测试的结果:

  • 方法一:2分20秒
  • 方法二:2分33秒

所以它没有多少,可能太接近了,无法在单个测试中判断。


编辑:我已经重新测试了更多数据,这对我来说是一个典型案例:146,918 个文件夹中有 28.3 GB 的 1,159,211 个文件:

  • 方式一:2h 15m、2h 34m:平均:2小时25分钟
  • 方法二:49m、57m:平均:53分钟

哇,方法 2 比方法 1 快近三倍!我会更新我的deletestuff.bat!

  • **警告:** 如果您有目录的符号链接,那么“del”将删除实际目录而不是符号链接。请务必小心,除非您知道目标目录中没有符号链接,否则不要运行这些命令。 (2认同)

小智 18

如果您必须定期删除大型目录树,请考虑将该目录树的根目录存储在单独的分区中,然后在需要删除所有内容时对其进行快速格式化。如果您需要自动执行此操作,可以使用此 DOS 命令:

echo Y | format Z: /FS:NTFS /X /Q
Run Code Online (Sandbox Code Playgroud)

其中 Z: 是您的“易失性”分区。注意:分区必须没有标签。我在这里写了关于这个的博客。

  • 但是,符号链接*可以*跨文件系统和链接目录,因此它们可能适用于此处。请参阅 mklink 命令(Vista 及更高版本;否则使用 Mark Russinovich/SysInternals 的结点。) (5认同)
  • @NimeCloud:硬链接不能跨文件系统或链接目录。 (2认同)

小智 10

在命令提示符(开始 -> 运行 -> cmd)中:

del /f /s /q foldername 
Run Code Online (Sandbox Code Playgroud)

  • @bobobobo 我用 ~30GB/1,000,000 个文件/15,000 个文件夹做了一些测试,del+rd 比 rd 快近三倍:http://superuser.com/questions/19762/mass-deleting-files-in-windows/ 289399#289399 (3认同)

rau*_*kka 7

除了非常快速地复制/移动文件(使用它自己的 API)之外,TeraCopy 还可以删除文件,而且速度也非常快。自从发现 TeraCopy 后,我就不再使用未安装它的计算机(如果我要复制/移动/删除)。

同一个安装程序安装 x64 版本,但要使用它,您必须手动强制它。

我推荐的稳定版本的测试版:http : //blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/

  • 所以你估计它快了 10% 吗?快两倍?快十倍?快一百万倍?如果您可以使用两个大型且相同的测试集对 rmdir 进行计时,那就太好了。 (6认同)

小智 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)。好极了!


Ben*_*oit 5

使用下面的代码通常对我很有效。

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)

  • 这对大约 36GB 的目录起到了作用,该目录有数百个目录和文件,这些目录和文件的长度超过 256 个字符,导致 del/rmdir“方法”惨败。这花了几秒钟,Windows 资源管理器估计需要几个小时! (3认同)