我希望能够有选择地复制文件列表并保留其目录结构。问题是,有很多文件的路径超过256个字符。这个问题通常是如何处理的?
编辑: 我应该说清楚我只想有选择地复制文件,而不是文件夹。我不认为robocopy可以有效地用于复制单个文件及其文件夹结构。
答案 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)