将多个文件从一个源复制到不同的目的地,递归地

问题描述

我在一个文件夹 (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

解决方法

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 关键字以实际执行 copy。附加 >nul 以取消 1 file(s) copied 消息。

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

[再次未经测试 - 回应评论]

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 以删除引号。