2009-08-07 07:00:33 +0000 2009-08-07 07:00:33 +0000
142
142

在Windows中大量删除文件

我有一个目录,在Windows 2008服务器上的某些子目录中包含约300万个文件。通过SHIFT+DEL在根目录上手动删除文件需要很长时间。有没有其他方法可以用**快的方式进行删除?

答案 (14)

180
180
180
2011-05-27 11:27:41 +0000

警告: 如果你有指向目录的符号链接,那么del将删除实际的目录而不是符号链接。要非常小心,不要运行这些命令,除非你知道目标目录内没有符号链接。

  • *

我经常需要从WinXP加密驱动器中删除大量文件和目录,通常是在45,000个文件夹中删除约22 GB的50万个文件。

用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
  • 方法1: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秒

下面是另一个测试的结果,使用404 MB,3243个文件夹中的19,521个文件。

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

2分33秒

所以这里面的内容并不多,可能是太接近了,单次测试无法判断。


编辑:我用更多的数据重新测试了一下,这是我的一个典型案例:28.3 GB的1,159,211个文件,146,918个文件夹。

-方法一: 2小时15分钟,2小时34分钟:平均:

  • 方法1:2小时15分,2小时34分:平均:2小时25分
  • 方法2:49分,57分:平均:53分
  • 方法1:2小时15分,2小时34分:平均:**2小时25分 我将更新我的deletestuff.bat!
18
18
18
2011-10-31 06:37:53 +0000

如果你必须经常删除大的目录树,可以考虑将该目录树的根部存储在一个单独的分区上,然后在你需要删除所有东西的时候简单地快速格式化它。如果你需要自动完成这项工作,你可以使用这个DOS命令。

echo Y | format Z: /FS:NTFS /X /Q

其中Z: 是你的 “不稳定 "分区。注意:该分区必须没有标签。我在博客上写过这个问题 这里

9
9
9
2009-08-07 07:07:04 +0000

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

del /f /s /q foldername
```。
7
7
7
2011-05-25 14:00:51 +0000

除了快速复制/移动文件(使用它自己的API),TeraCopy可以删除文件,而且速度非常快。自从发现了TeraCopy,我不会在没有安装它的情况下使用电脑(如果我要复制/移动/删除)。

同样的安装程序安装x64版,但要使用它你必须手动强制安装。

比起稳定版,我更推荐测试版。 http://blog.codesector.com/2010/09/22/teracopy-2-2-beta-3/

6
6
6
2012-02-09 17:35:24 +0000

我做了一个蝙蝠文件,做同样的事情。

@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

它的工作分为两步,第一步,它尝试删除文件。第二步是尝试获取文件的所有权。y应该根据你的本地情况进行修改(在英语中代表yes)。如果任务失败了(例如,如果因为权限问题失败了),那么你必须重新运行它。不过,第二轮不会尝试删除第一轮删除的文件,所以可能会很快。


使用方法。以delfolder.bat的形式保存在路径路径中(例如c:\windows),然后以

delfolder "foldername"

的形式运行,其中foldername是文件夹的名称

在我的测试中,删除123'000个文件用了3分钟(sata 7200rpm)。YAY!

4
4
4
2011-12-23 15:47:15 +0000

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

mkdir empty_dir
robocopy empty_dir dir_to_wipe /mir /r:0 /w:0 /e
rmdir empty_dir dir_to_wipe
3
3
3
2009-08-07 07:09:35 +0000

从命令提示符中使用rd /s命令

2
2
2
2009-10-06 21:59:15 +0000

最好的实际解决方案可能是将文件夹移出某个地方(如回收站),然后开始删除它。这会花上很多时间,但至少它不会再碍事了。

我很确定删除所有这些文件所需的时间是任务的内在要求,而不是执行删除时的低效率。

1
1
1
2009-10-06 23:45:48 +0000

安装 Cygwin ,然后使用rm -r。但这很可能是矫枉过正。

1
1
1
2011-05-31 12:40:36 +0000

您是否启用了短文件名生成功能?如果有,你真的需要它吗?删除一个文件只是一个元数据操作。所以,如果你有两倍的名字要删除,工作量就会大大增加。

0
0
0
2017-12-13 19:46:11 +0000

Hugo ](https://superuser.com/questions/19762/mass-deleting-files-in-windows/289399#289399)的答案是最快的,但它并没有在第一遍中删除隐藏文件或系统文件,所以如果你想要一个更完整的解决方案,请使用参数/a。

del /f /s /q /a foldername > nul
rmdir /s /q foldername

关于Magallanes的BAT文件,要非常小心地使用takeown和icacls,因为硬链接共享相同的权限和所有者,所以如果你想删除的文件夹里有未饱和的硬链接,使用takeown和icacls会改变文件夹外文件的权限和所有者。

使用 ln.exe 工具,你可以列出文件夹内所有硬链接的文件,并知道它们是否与文件夹外的文件硬链接(不饱和硬链接):

ln.exe --enum foldername > HardlinksList.txt
```。
0
0
0
2010-04-03 16:30:58 +0000

你有没有试过这两个程序?

在源字段中输入要删除的路径,然后单击 “删除"。

这些应用程序不会将文件放入回收站。请谨慎使用。

0
0
0
2017-06-15 12:00:52 +0000

这是对前面提到的答案中的步骤的补充和补充。

上面给出的两种方法似乎相当有效,但要确定性能是很困难的,除非在完全相同的条件下对它们进行基准测试。

  • 物理硬盘驱动器设备和型号
  • 最好在克隆数据之前对ATTO/Crystal Disk进行基准测试
  • 相同的分区/卷的位置和几何形状
  • 做到这一点的方法是对样本分区/文件夹进行清除,并将其克隆为完全相同类型的硬盘驱动器(从上一步开始)
  • 然后通过批处理文件执行配置,并使用Powershell Cmdlet记录和测量其性能。

  • 以下是一些示例文件夹(以总大小命名),我进行了实验,但无法得到任何结论性的性能/结果。

r.bat

rmdir /s/q 3.2G

rd.bat

del /f/s/q 3.3G > nul
rmdir /s/q 3.3G
  • 我本想发布输出的日志文件,但我相信由于文件夹文件的大小和分布等原因,差异很大。

Powershell:

PS S:\T> Measure-Command { S:\T\rd.bat } > rdlog.txt

PS S:\T> Measure-Command { S:\T\r.bat } > rlog.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_1.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_1.8G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_2.4G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_2.7G_log.txt

PS S:\T> Measure-Command { S:\T\r.bat } > r_3.2G_log.txt

PS S:\T> Measure-Command { S:\T\rd.bat } > rd_3.3G_log.txt
-1
-1
-1
2009-08-07 07:13:28 +0000

删除文件夹比删除多个文件要快。

所以如果你喜欢用鼠标而不是命令提示符,你可以创建目录,将文件移动到那里,然后删除它(如你所说的Shift+Del)。