【问题标题】:How do you automate copying file with path too deep issues in Windows?如何在 Windows 中自动复制路径太深的文件?
【发布时间】:2010-09-19 04:32:06
【问题描述】:

我希望能够选择性地复制文件列表并保留其目录结构。问题是有不少文件的路径超过 256 个字符。这个问题一般是怎么处理的?

编辑: 我应该明确表示我只想选择性地复制文件,而不是文件夹。我认为 robocopy 不能有效地用于复制单个文件及其文件夹结构。

【问题讨论】:

    标签: windows copy


    【解决方案1】:

    Robocopy 是Windows Resource Kit 的一部分,旨在处理此类情况。

    【讨论】:

    • 作为补充,Robocopy 是 Windows Vista 的一部分(可能是 Sever 2008 和任何未来的 Windows 版本)。
    • 我可能没有正确阅读文档,但我不明白如何使用 robocopy 选择性地仅复制一个文件及其目录结构。我在具有深路径的目录上对其进行了测试,但似乎只能指定目录而不是特定文件。
    【解决方案2】:

    您想自己实现复制过程吗?如果是这样,您是否尝试过 UNC 路径?我从来不需要和他们一起工作,但简单地说,你使用前缀并且路径可以比 MAX_PATH 长得多,如 in this MSDN article 所述。

    【讨论】:

      【解决方案3】:

      我编写了一个 VBscript,它检查路径长度并在达到某个阈值时调用subst。这些调用相互堆叠,因此在递归中间,存在这种布局:

      C:\a\very\long\path
      subst K: "C:\a\very\long\path"
      
      K:\another\very\long\path
      subst L: "K:\another\very\long\path"
      
      L:\yet\another\very\long\path
      subst M: "L:\yet\another\very\long\path"
      
      xcopy M:\*.* "D:\target"
      

      这样每一层的 subst 都会生成一个更短的路径。这也意味着,您必须按顺序复制文件夹,以便在发出复制命令之前能够检查长路径。

      复制文件夹中的所有文件后,递归会跳回一级 (subst /d),从而释放一个驱动器号。

      使用 4-5 个驱动器号,当路径变深时,它们相互替代,我能够复制长度超过 MAX_PATH 限制的路径。


      编辑

      这描述了使用 subst 执行此操作的一般过程。你怎么做取决于你的需要,我总是以最小的“解决这个单一问题”的方式使用这个小技巧。

      例如,复制到同样深的目标路径意味着您需要另一堆替换的驱动器号。

      在一个深度嵌套的目录结构中解压缩所有 .zip 文件可能只需要在堆栈上,但您需要稍微缩短阈值以考虑 .zip 中的文件夹等。

      【讨论】:

        【解决方案4】:

        过去的一个技巧是为目录的一部分分配一个驱动器号。

        一个选项是 SUBST 命令。这将允许您用驱动器号替换驱动器号和路径组合。我已经在安装包中看到了这一点,以获得更短版本的目录。

        或者,您可以使用共享文件夹并将其映射到驱动器号。或者您可以使用管理共享。

        但实际上,如果您有可以运行的代码,那么处理它要比这些 hack 好得多。

        【讨论】:

          【解决方案5】:

          按照 Sören 的建议,试试 Robocopy:

          robocopy empty_dir base_nested_dir /purge
          

          【讨论】:

            猜你喜欢
            • 2021-09-01
            • 2019-09-23
            • 1970-01-01
            • 2017-11-04
            • 2018-12-16
            • 2023-03-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多