【问题标题】:Speed up powershell move-item command加快powershell move-item命令
【发布时间】:2020-09-12 01:06:56
【问题描述】:

我一直在使用基本的“Move-Item -path G:\folder* -destination K:\folder”

但是,我有大约 20,000 个文件夹和大约 1500 万个文件。这已经 2 天了,到目前为止只移动了几千个文件夹(以及里面的内容)。我在 Windows 资源管理器中使用此命令而不是典型的移动功能的原因是我有文件名非常长的文件。我已经尝试在 Windows 中扩展文件名限制,但在使用 Windows 资源管理器“移动”时它仍然会达到限制。它似乎只能与 powershell 一起工作(或似乎可以正常工作)。

有什么办法可以加快速度吗?

【问题讨论】:

    标签: windows powershell


    【解决方案1】:

    使用带有/MT:x 参数的robocopy。 /MT 用于多线程。此外,它不受 Windows 界面中的字符限制。事实上,您会在网上找到许多 robocopy 示例,只是为了查找长文件名。您不必放弃已经完成的工作。 Robocopy 是增量式的,它不会重新复制未更改的文件。命令可能类似于:

    Robocopy.exe <SourceFolder> <DestinationFolder> /E /MT:20 /Log:c:\temp\Robolog.log
    

    或者你的例子:

    Robocopy.exe "G:\folder" "K:\folder" /E /MT:20
    

    注意/更新:从 /MIR 更改为 /E 因为之前的工作可能已经移动了一些文件。

    此命令将有效地运行 20 个 Robocopy.exe 进程协同复制数据。

    Robocopy 有很多参数,所以上面的例子是我对你需要的猜测。 /E 表示复制所有子文件夹,包括空子文件夹,并将复制源目录下的所有文件夹。使用/Log/Log+ 会将输出发送到文件而不是屏幕。根据我的经验,将程序从屏幕回显中保存可以加快速度。也就是说,在使用/MT:x 时,我在日志文件本身中得到了不同的结果。但是,这里的任务是更快地获取数据...

    顺便说一句,/TEE 允许您将输出发送到屏幕和日志。

    此外,由于它是增量的,您可以在之后重新运行,也许使用不同的日志记录和线程选项来确认复制的所有内容。如果您选择不使用/MOVE ...您甚至可以制作一个命令来在完成后清除源文件和文件夹。

    RoboCopy.exe <EmptyDirectory> <OriginalSourceDirectory> /MIR
    

    始终确保在执行之前使用/L 参数进行测试。 /L 是列表模式,因此它会显示或记录将发生的事情,而无需复制或删除任何内容。

    使用 Robocopy.exe /?获取完整文档。

    【讨论】:

    • 我尝试了“Robocopy.exe G:\Folder K:\Folder /MOVE /MT:20 /Log:c:\temp\Robolog.log”但是得到了所有错误说“extra dir”试过寻找解决方案,但似乎无法确定。但它似乎不想复制,因为有些文件在 dest 而不是 source?
    • 查看 MIR 命令,它似乎是一个“/e + /purge”命令。但是,看着 purge 它说“删除源中不再存在的 dest 文件/目录”这是否意味着某些东西会在此过程中丢失?我希望 100% 将所有文件夹和内容从 G:\ 移动到 K:\,假设之前的 powershell 命令在 K 中已经有几千个文件和文件夹
    • 是的,考虑到您是从搬家开始的。您可以使用/E 进行复制而不进行清除。
    • 你是对的。我更改了使用的目录(升级了一级)并且它起作用了!非常感谢!!
    【解决方案2】:

    试试Start-BitsTransfer,这里是documentation

    【讨论】:

    • BITS 传输非常简洁。我想知道它如何在性能方面与 robocopy 在 smb 上相提并论。
    • 我没有在速度方面进行基准测试,但只是觉得它更有效率。对我来说最大的好处是它可以在后台运行,并且我可以在会话超时或网络故障后恢复(Resume-Bitstransfer),而之前前台复制失败多次,因此更适合复制大量文件或大文件。
    猜你喜欢
    • 2014-02-13
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多