将同一目录从多个父目录复制到多个目标

Copying the same directory from multiple parent directories to a multiple destinations

我想做的是将存在于多个父目录中的目录复制到目标位置,同时保留 \Parent\child 结构。源目录是版本化的软件版本,我想要的目录包含每个版本的热修复程序。

源目录结构

\Releases\app_26.6.1.123\Patch\
\Releases\app_26.6.2.456\Patch\
etc etc

最后两个数字发生变化,但格式始终为#.## 或#.###,第一个# 从 1 递增到 7。

我想做的是这样的:

copy \Release\app_26.6.[1-7].*\Patch\ to C:\Temp\eureka\app_26.6.[1-7].*\Patch\

我认为我将不得不使用 for 循环迭代,但我的大脑正在努力想出一种在 powershell 中执行此操作的方法;这就是我来这里的原因。

这个post和我想做的很接近,但是平台不对:

谢谢

我假设每个源补丁有多个目的地?尝试这样的事情,在名称中通配版本号:

Foreach ($src in (Get-Item "\Releases\app_*\Patch")) {

  # Split off the last version number on the parent folder
  $baseVersion = ($src.parent.name -split '\.')[0..2] -join '.'

  # Get each destination folder using * wildcard
  $destinations = Get-Item "c:/Temp/eureka/$baseVersion*/"

  # Copy folders
  Foreach ($dst in $destinations) {
    Copy-Item $src.FullName $dst.FullName -Recurse 
  }

}

这应该创建以下源和目标结构:

# src
\Releases\app_26.6.1.123\Patch
\Releases\app_26.6.2.456\Patch

# dst
c:/Temp/eureka/app_26.6.1.100/Patch/1
c:/Temp/eureka/app_26.6.1.200/Patch/1

c:/Temp/eureka/app_26.6.2.300/Patch/2
c:/Temp/eureka/app_26.6.2.400/Patch/2

如果您不需要通配符但特别需要 [1-7],您可以使用正则表达式:

$destinations = Get-Item "c:/Temp/eureka/*/" |
  Where Name -match "$baseversion.[1-7]"