将多个文件从单个源复制到不同的目标,(递归)
Posted
技术标签:
【中文标题】将多个文件从单个源复制到不同的目标,(递归)【英文标题】:Copy multiple files from a single source to different destinations, (recursively) 【发布时间】:2021-05-09 01:45:12 【问题描述】:我在一个源文件夹 (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
【问题讨论】:
欢迎。请拨打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
关键字以实际执行copy
s。附加 >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?以上是关于将多个文件从单个源复制到不同的目标,(递归)的主要内容,如果未能解决你的问题,请参考以下文章
Object.assign() 从一个或多个源对象复制到目标对象