将多个文件从单个源复制到不同的目标,(递归)

Posted

技术标签:

【中文标题】将多个文件从单个源复制到不同的目标,(递归)【英文标题】:Copy multiple files from a single source to different destinations, (recursively) 【发布时间】:2021-05-09 01:45:12 【问题描述】:

我在一个源文件夹 (c:\sandbox\image\) 中有 4 个文件。

文件如下,INSTALL1.SWMINSTALL2.SWMINSTALL3.SWMINSTALL4.SWM

我的目标结构是c:\sandbox\extract\*\*\*

我希望仅当它们存在于目标文件夹中时才能复制它们。我的挑战是目标***文件夹一直是同一个名称,但是子文件夹名称会发生​​变化,所以我最终会使用通配符。

我已经尝试使用 xcopy/U/S 参数,但它正在复制 0 文件,所以我想我错过了一些东西。

这是我在批处理文件中尝试的内容,但没有成功。

xcopy c:\sandbox\image\*.SWM c:\sandbox\extract\ /U /S

【问题讨论】:

欢迎。请拨打tour,阅读How to Ask 和minimal reproducible example。您应该包含您的目的地的确切目录结构。请注意,对于 4 个文件,您可以只编写 4 个复制命令并继续 :) 对我的问题进行了一些修改。我不反对为源创建 4 个不同的命令。我的挑战仍然是目的地是通配符,而 xcopy 似乎不喜欢那样。 【参考方案1】:
for /f "delims=" %%b in ('dir /ad /s/b "C:\sandbox\extract"') do for /L %%c in (1,1,4) do if exist "%%b\install%%c.swm" ECHO copy /y "c:\sandbox\image\install%%c.swm" "%%b\install%%c.swm" 

应该echo 所需的copy 命令。删除echo 关键字以实际执行copys。附加 >nul 以抑制 1 file(s) copied 消息。

未经测试,假设要求是将install?.swm 复制到具有根"C:\sandbox\extract" 的子树中的任何现有版本上

[再次未经测试-响应 cmets]

for /f "delims=" %%b in ('dir /ad /s/b "C:\sandbox\extract"') do for %%c in ("" 2 3 4) do if exist "%%b\install%%~c.swm" ECHO copy /y "c:\sandbox\image\install%%~c.swm" "%%b\install%%~c.swm" 

注意for /L替换为普通for; list 是install 的后缀列表;在do 子句中使用时,使用%%~c 代替%%c 来删除引号。

【讨论】:

这太棒了!我刚刚意识到第一个文件是 INSTALL 而不是 INSTALL1。脚本拾取 2、3 和 4 没问题。我试图调整脚本,但让它变得更糟。如何让脚本获取 INSTALL.swm?

以上是关于将多个文件从单个源复制到不同的目标,(递归)的主要内容,如果未能解决你的问题,请参考以下文章

Linux 之 cp 命令

Object.assign() 从一个或多个源对象复制到目标对象

在 Maven 构建期间将文件夹从源复制到目标

将包含名称的文件从源复制到目标c#

AWS DMS - 如何将 RDS 表数据写入单个 S3 目标文件?

从一个目录复制文件并替换多个目录中的文件