从Windows目录中删除100,000个文件的最佳方法是什么


12

我的用户在一个目录中拥有超过100,000个文件。在资源管理器填满内存且机器可能崩溃的同时,机器锁定并长时间无法使用。有一种简单的转储目录和内容的方法吗?我们尝试使用命令行deltree,但接缝效果没有改善。

戴夫

额外-

我们在同一用户(实际上是客户端)上多次遇到此问题。程序在运行期间会创建数十万个临时文件。如果程序正常运行,则没关系,因为完成此操作后它们会被缓慢删除。但是它时不时地死于文件的混乱。我们尝试使用rmdir和del等方法,它们比使用资源管理器更快,但是通常最终会遇到相同的问题。分区损坏,有无法解释的锁定文件,某些文件存在权限问题,这使删除操作无法进行。通常,这些问题可以通过重新启动来解决,但在这种情况下,因为这是我们无法在生产时间内使用的关键系统。在Unix上,您可以只执行rm -rf等,这很快,而且通常没有真正的问题。

顺便说一句-该应用程序正在更改,但一段时间不会投入生产,尽管这个问题对其他人来说可能很有趣。

更新-因为我们的系统上有MKS Nutcracker(没有命令行实用程序),所以我们让程序员将一个简单的rm组合在一起。这比del / deltree等快几个订单。我感到奇怪的是,没有像标准的Windows系统管理工具这样简单的应用程序。


Answers:


15

您可以使用rmdir

rmdir /s /q FOLDERNAME

标志:/s表示递归删除,/q是“安静”模式。


我们确实尝试过-我将在问题中添加更多内容。
David Allan Finch,2009年

这应该为您工作。奏效了吗?
s_ruchit,2009年

是的-我已经添加了我们在问题中上面已经看到的哪些问题。谢谢你的评论。
大卫·艾伦·芬奇

我将接受这个答案。但是,还有一个更好的解决方案,那就是使用更简单的unix风格的rm,但是由于这对大多数用户不可用,因此对于99%的用户而言,这是最佳选择。应该为Windows实现一个unix风格的rm,它除了递归删除外什么都不做。顺便说一句,我们的程序员MKS remove_tree(请参见上文)对rmdir进行了重拍,因此问题不是Windows,而是内置应用。
David Allan Finch 2009年

6

我以前在管理的服务器上遇到此问题。完全跳过资源管理器并使用命令提示符。导航到文件夹和“德尔

这样可以避免GUI(资源管理器是垃圾箱)和回收站的开销。


我们确实尝试过-我将在问题中添加更多内容。
大卫·艾伦·芬奇

4

除非旧版16位应用程序需要此功能,否则请尝试通过禁用短文件名生成来提高性能。这可能会对具有大量文件的目录操作产生重大影响。

Regedt32 select:
"HKLM\system\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameC
reation"=1

然后使用:

RMDIR / S / Q [驱动器:]路径

删除目录及其所有文件。


这很有趣。
David Allan Finch


3

如何将该临时文件夹移动到其他驱动器/分区?除了删除所有垃圾之外,您可以格式化驱动器(GUI或命令行)。使用快速格式化,这应该相当快。


1
我们尝试过这种方法,有时它不允许这样做。现在,客户端每次都在另一个目录中运行该程序。
大卫·艾伦·芬奇

在路径和驱动器之间创建硬链接,即:硬链接“ c:\ my silly app \存储文件的位置”将驱动器X:指向一个启动批处理
Nime Cloud

2

这是以前的帖子的组合

打开命令窗口:
File -> Run -> cmd

删除目录
rmdir /s /q FOLDERNAME

要么

删除文件模式
cd \....\directory
del *.[something]

正如您在问题中提到的,Windows资源管理器确实可以减慢速度。

看到您的更新后,我有一个属于自己的文件
检出列表


我注意到过去只有几百个文件,可惜资源管理器可以像命令行应用程序一样快地完成它-我们可以让客户端自己做。感谢您的回答。
大卫·艾伦·芬奇

1

我没有什么比del和rm更好的了,但是即使它们花费很长时间,也不应导致分区损坏。锁定的文件可能是因为创建它们的程序意外死亡。

有时,即使无法删除文件,也可以将它们移动到另一个临时子目录。我只是创建一个_todel子目录并将其移动到那里。如果将整个目录上移而不是文件本身上移,通常效果会更好。

除此之外,使删除速度更快的唯一方法是对硬盘进行碎片整理。临时的解决方法可能是将此目录移动到samba共享,或将NTFS结点移动到便携式USB硬盘。(较小的分区比使用整个硬盘会更好,更快。)然后,您可以弹出硬盘,然后在另一台PC上进行快速格式化。


那就是我的想法-IE损坏的文件,但为什么它们不被NT内核关闭?速度是程序的问题,因此不能使用Samba或USB硬盘。但是建议客户端为每次运行创建一个单独的分区并重新格式化。不知道他们是否尝试过。-谢谢
大卫·艾伦·芬奇

1

删除文件损坏的分区?不管要删除的文件数量如何,这都是磁盘的主要问题。

我会尝试在命令行中删除并删除尽可能多的内容,直到遇到被锁定的内容为止。然后使用Process Explorer查找打开了该文件的进程。终止该进程(如果可以),然后再次执行删除操作。冲洗,重复:)


想尝试一下,但是我们没有直接访问该机器的权限,并且该应用程序已终止。不管怎么说,还是要谢谢你。
David Allan Finch 2009年

1

使用“ Live” Linux CD rm -rf重新引导


我们不能只重启服务器,因为这对于客户端来说很重要-但感谢您的回答。
David Allan Finch 2009年

1

Kinda hacky,但是您可以创建一个脚本来对文件进行大块删除,我不知道其格式,但是假设它是以字母az开头的文件,则可以

deltree /y a*
deltree /y b*
...
deltree /y z*

使用您选择的删除方法更改deltree。可能会更慢,但更容易出错?

旁注:您也可以尝试安装cygwin来获取rm之类的命令,即使遇到一个文件错误,该命令也可能会继续删除文件。


尝试过此方法,但并不能真正解决问题-无论如何,谢谢。
David Allan Finch 2009年

我们还安装了MKS Nutcracker,但出于安全原因,删除了命令行实用程序-不是选择。但是,我们所做的是写出自己的rm,这确实有效。
David Allan Finch 2009年

1

首先,各种方法都起作用。如果您将cygwin加载到了拇指驱动器上,则可以将其插入本地USB,启动cygwin外壳并按照上述参考运行RM命令。这是一种方便的方法,可以使Unix灵活性近在咫尺。


在管理系统时,这是一个合理的解决方案。
David Allan Finch 2009年

1

您也可以启动到故障恢复控制台,或者类似方式。那应该完全忽略操作系统的任何奇怪问题。


抱歉,我们不能只重启服务器,但感谢您的回答。
David Allan Finch 2009年

1

从Linux机器上挂载文件夹,然后从那里进行递归删除。

# mount -t cifs //server/share /mnt/tobedeleted -o username=yourshareusername

# rm /mnt/tobedeleted/* -R

您甚至可以定期使用cron作业删除文件。


你尝试过这个吗?
David Allan Finch 2012年

1

为什么不只使用robocopy并镜像一个空目录?

只需创建一个空文件夹,然后使用:

ROBOCOPY C:\ThisIsAnEmptyFolder C:\Users\SomeUser\Desktop\SomeFolderWithTempFiles /MIR

0

如果没有其他建议起作用,您是否考虑过加速I / O?

购买更好的控制器,更快的磁盘。

还是我想知道,如果文件是临时的(如您所暗示的)并且大小允许,您是否可以在包装箱中添加额外的RAM(便宜)并设置RAM磁盘?

最好的情况是,删除大量文件时性能不会降低。最坏的情况是,重新启动会清除分区。


很喜欢,但是我认为客户不会因为期望新的程序版本而掏腰包-感谢您的回答。
大卫·艾伦·芬奇

英国的服务器RAM当前约为每GB 10英镑。
tomfanning

是的,但是客户为机器支付了X(从报价中得出),并且没有理由多花Y。
David Allan Finch 2009年

因为指定的服务器不能很好地完成工作?
tomfanning

对于这项工作已经足够了。问题在于该程序存在一个正在修复的错误。他们不会再花钱了。
David Allan Finch 2009年

0

尝试将其剪切并粘贴到回收站中,它应该绕过尝试移动每个文件的尝试。不知道它将对清空垃圾箱产生什么影响,因为那样的话它将可能遍历每个文件。


我认为客户端尝试了此方法,它并不比通常使用Explorer更好。谢谢
大卫·艾伦·芬奇

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.