4

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

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

4

5 回答 5

8

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

于 2008-10-25T15:06:21.823 回答
3

您想自己实施复制过程吗?如果是这样,您是否尝试过 UNC 路径?我从来不需要使用它们,但是简单地说,您使用前缀并且路径可以比 MAX_PATH 长得多,如MSDN 文章中所述

于 2008-10-25T17:02:34.053 回答
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 中的文件夹等。

于 2008-10-25T15:04:34.183 回答
1

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

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

Alternativly you can use a shared folder and map it to a drive letter. Or you can use the an administrative share.

But really if you have code that you can run, then handling it there is much better that these hacks.

于 2008-10-25T17:56:39.420 回答
0

As Sören suggested, try Robocopy:

robocopy empty_dir base_nested_dir /purge
于 2010-07-23T16:24:35.977 回答