【问题标题】: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 Askminimal reproducible example。您应该包含您的目的地的确切目录结构。请注意,对于 4 个文件,您可以只编写 4 个复制命令并继续 :)
  • 对我的问题进行了一些修改。我不反对为源创建 4 个不同的命令。我的挑战仍然是目的地是通配符,而 xcopy 似乎不喜欢那样。

标签: windows batch-file cmd copy 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?
猜你喜欢
  • 2019-09-01
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 2019-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多