问题描述
我在一个源文件夹 (c:\sandBox\image\
) 中有 4 个文件。
文件如下,INSTALL1.SWM
、INSTALL2.SWM
、INSTALL3.SWM
、INSTALL4.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
以删除引号。