/MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).
/R:1 :: number of Retries on failed copies: default 1 million.
/W:1 :: Wait time between retries: default is 30 seconds.
/MT:128 :: Do multi-threaded copies with n threads (default 8).
n must be at least 1 and not greater than 128.
This option is incompatible with the /IPG and /EFSRAW options.
Redirect output using /LOG option for better performance.
使用 MT 时您需要 LOG,在屏幕上显示输出时肯定会有可测量的延迟。
通过使用 /MT:128 作为一个选项,它将一次性“删除”最多的文件数量。
另请注意,如果这是您第一次使用 Robocopy,您应该使用 /L 标志进行试运行:
/L :: List only - don't copy, timestamp or delete any files.
从图像看来,您正在通过资源管理器删除文件,这是可能的最慢方法。
你可以做些什么来改进:
使用Shift+Del删除文件,因此删除的文件不会移动到回收站(无法恢复)
del /?
使用类似于(用于查看所有参数)的命令从命令提示符内发出删除:我不知道为什么 Explorer 这么慢,但您可以考虑将每批图像放在单独的文件系统卷上并快速格式化卷以删除它们。Windows 10 原生支持将文件挂载为磁盘卷。重新格式化的速度与卷上的内容无关,因为它忽略了现有的文件系统而只是写入一个新的。
数以万计的 20K 文件听起来并不像千兆字节。如果所有实时批处理的总大小小于您的物理 RAM,您还可以将它们放在 RAM 磁盘上(使用例如ImDisk),仍然格式化或卸载卷以删除它们。即使是 RAM 磁盘上的普通递归删除也可能会快得多,具体取决于导致减速的原因。如果您需要文件在重新启动后仍然存在,这显然不是一个选项。
重新格式化以删除的一个缺点是您需要成为提升的管理员。另一个是您可能会不小心格式化错误的卷,但实际上任何大规模删除文件的方法都有删除错误文件的风险。如果您给卷提供描述性标签,
TempJpeg1
那么格式化它们可能与从命令行删除一个巨大的目录一样防错。至少在此操作期间禁用您拥有的任何防病毒/反恶意软件实时保护。这包括 Windows Defender。还有任何反勒索软件保护(由某些备份程序提供)。
实时保护通常与文件操作挂钩,并且在历史上因大幅减慢涉及大量文件的任何操作而臭名昭著。
如果您觉得有必要,您可以在删除完成后重新启用它们。
将其作为命令运行会快很多。启动
cmd
并运行这将删除文件夹及其中的所有文件和子目录,而不会在屏幕上显示它正在删除的每个文件名。
每批创建一个分区,比如说 10GB 左右,完成给定的批快速格式化分区后。所有文件在几秒钟内消失。
处理漫游配置文件,我已经看到了很多。根据我的经验,发送任何类型的删除命令都不如使用 Robocopy 到 /MIR 到目标的空文件夹那么快。我没有任何原始数据或实际指标表明这比任何已经提到的选项都快,但它比使用 Explorer shell 快得多。
只需创建一个新的空目录,或引用当前的空目录,然后运行以下命令:
使用 MT 时您需要 LOG,在屏幕上显示输出时肯定会有可测量的延迟。
通过使用 /MT:128 作为一个选项,它将一次性“删除”最多的文件数量。
另请注意,如果这是您第一次使用 Robocopy,您应该使用 /L 标志进行试运行:
然后检查日志并确保操作符合您的要求。
参考:
要添加到提供的答案,删除操作需要这么长时间的原因是由于您使用的硬盘驱动器类型。在您的一条评论中,您说您使用的是机械硬盘驱动器,与 SSD 相比,它们可以执行的 IOPS 量非常小。Wikipedia 列出了机械驱动器和固态驱动器可以在其站点上执行的大致 IOPS 数量。
基本上发生的是操作系统告诉硬盘驱动器擦除分区表中文件的元数据,从而将其从视图中删除(它仍然存在,但操作系统不再知道如何访问它)。它基本上是对硬盘驱动器的非常小的写入(它正在向它写入 0),因此它是一个快速的 IOP,它可以做的比 Wiki 上列出的要多得多,因为 Wiki 列出了随机和持续的写入。
现在要记住的是,Explorer 会在删除时尝试与系统上运行的所有其他东西配合得很好,这可能会很慢。另一方面,该
del
命令根本不会尝试变得好,并且会尽快删除。升级到 SSD 将有助于您的工作,因为它们的 IOPS 通常以数千计,而机械驱动器以数百计。您也可以尝试使用闪存驱动器看看是否有帮助;但是,您的结果将高度依赖于您使用的驱动器。如果您有 RAM,(并且不介意丢失图像的风险),您可以创建一个 RAM 驱动器并使用它。我个人使用过ImDisk Virtual Disk Driver(无从属关系),取得了很大的成功,而且它是免费的。
我在一些自动化测试中遇到了这个确切的问题,每次测试运行都会创建和删除数千个文件。
这是我为获得良好性能所做的事情。
始终删除整个文件夹并避免使用回收站。如果您手动执行此操作,请使用命令行。
您可以将一些内存转换为 RAM 驱动器吗?我购买了额外的 RAM,它运行良好,因为这些文件应该在我的测试中被删除。(更好的解决方案是专用的电池支持 RAM 驱动器,但它们非常昂贵。)
随着时间的推移,写入第 1 代和第 2 代 SSD 驱动器的速度会变慢,最终无法使用。运行低级别的“Trim 命令”可以解决此问题,但并非所有操作系统/硬件组合都支持 Trim。最终我需要购买新的 SSD,因为我的 SSD 被重写了太多次。(显然,我的测试正在扼杀我廉价的 SSD 驱动器。我花了一段时间才弄清楚。)
如果您使用的是 HDD,请定期对驱动器进行碎片整理。
祝你好运。我花了几个月的时间和几个 SSD,然后是额外的 RAM,才找到对我有用的策略,所以我感到你的痛苦..
除了其他很棒的答案之外,我还想与您分享一些技巧:
del *.*
del.
.现在让您的生活更轻松:
echo Y | del.
删除许多目录条目将比删除单个净大小的目录花费更长的时间。删除多个文件时,删除单个文件时需要多个命令而不是单个命令。
现在,当一个大文件被删除时,文件映射器被告知取消分配该大文件的内存,但文件的 1 和 0 不会重置。映射器只是被告知可以自由地在旧的 1 和 0 上写新的东西。基本上,这是一个命令,需要时间来清除碎片文件的所有内存分配。当您删除一百万个小文件时,您正在向映射器发送一百万个命令,必须一次执行每个命令。
因此解决方案是使用软件擦除已删除文件的驱动器以及留下的 1 和 0。只需一个命令即可擦除空间。仅当您认为以后不需要恢复文件时才使用该软件。