如何在Windows中使用路径太深的问题自动复制文件?

时间:2008-10-25 14:58:47

标签: windows copy

我希望能够有选择地复制文件列表并保留其目录结构。问题是,有很多文件的路径超过256个字符。这个问题通常是如何处理的?

编辑: 我应该说清楚我只想有选择地复制文件,而不是文件夹。我不认为robocopy可以有效地用于复制单个文件及其文件夹结构。

5 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

您想为自己实施复制程序吗?如果是这样,你是否尝试过UNC路径?我从来没有使用它们,但是简单地说你使用了前缀,路径可以比MAX_PATH长得多,如in this MSDN article所述。

答案 2 :(得分:2)

我写了一个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中的文件夹等。

答案 3 :(得分:1)

过去的黑客攻击是为目录的一部分分配驱动器号。

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

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

但实际上,如果你有可以运行的代码,那么处理它就会更好地解决这些问题。

答案 4 :(得分:0)