Bash &引用;cp——父母”;在批处理文件/VBScript中

Bash &引用;cp——父母”;在批处理文件/VBScript中,bash,vbscript,copy,batch-file,parents,Bash,Vbscript,Copy,Batch File,Parents,在Windows环境中,只有批处理文件和VBScript可供使用,您如何编写此文件 find -name '*.ext' -exec cp --parents {} destination/ \; 或者这样说: 在当前文件夹中递归查找某些文件名模式(在上面的示例中,以名为ext的扩展名结尾) 将这些文件复制到目标文件夹(无论在何处),保留目录树结构(或创建任何缺少的中间目录),如当前文件夹中所示 编辑: 我的错,我错过了cp命令中的--家长标志。。。如下所示的xcopy将只重新创建向下路径,

在Windows环境中,只有批处理文件和VBScript可供使用,您如何编写此文件

find -name '*.ext' -exec cp --parents {} destination/ \;
或者这样说:

  • 在当前文件夹中递归查找某些文件名模式(在上面的示例中,以名为
    ext
    的扩展名结尾)
  • 将这些文件复制到目标文件夹(无论在何处),保留目录树结构(或创建任何缺少的中间目录),如当前文件夹中所示
编辑: 我的错,我错过了cp命令中的--家长标志。。。如下所示的xcopy将只重新创建向下路径,而不是当前目录“上方”的目录

我[现在]相信他[不会]独自完成这个把戏。但格兰特·瓦格纳的“for/r”把戏却创造了奇迹

这应该起作用:

for /r %%a in (*.cmd) do xcopy %%a C:\DESTINATION%%~pa
请注意,
DESTINATION
永远不应该是您试图从中复制的目录的子目录,否则,
for/r
将进入一个递归循环,复制它已经复制的文件,创建越来越长的目录路径(不要问我怎么知道)


您可以使用
xcopy/c
(即使发生错误也要继续复制)使它稍微更健壮一些。您可能还想查看
xcopy/?
,看看是否还有其他有价值的东西(
/q
/r
/o
,等等)。

请精确到什么程度?我尝试了/t和/I选项,但没有成功。
/t
只创建目录结构,但不复制任何内容,而
/I
只是更改目标的语义。我想您可能需要
/S
标志。因此,沿着
xcopy*.ext destination/S
/S的思路,从上到下都可以工作,不是吗?我只需要复制具有给定模式及其目录树结构的文件。这正是bash命令所做的。为了更好地理解这一点,想象一下当前文件夹中有数千种不同类型的文件,但您只需要这些特定的文件。当路径达到32k个字符时,它将最终停止:-)+1就像一个符咒,Grant!只有傻瓜才会在目的地放一个循环引用,对吗?哈哈。它工作得很好(差不多了),谢谢格兰特!但在目标中创建的目录树结构实际上是文件的绝对路径。有没有办法只创建相对路径?@Provated:如果你需要的是从当前目录到新位置的相对目录,保留路径,那么[mjv的答案][
xcopy/s*.cmd C:\DESTINATION
只要在源目录中运行它就可以工作。如果从另一个目录
xcopy/s[source\u dir]\*.cmd C:\DESTINATION
运行它,就会得到
C:\DESTINATION\[source\u dir]\directories\u和\u文件
for /r %%a in (*.cmd) do xcopy %%a C:\DESTINATION%%~pa