首页 > 解决方案 > 将同一目录从多个父目录复制到多个目标

问题描述

我想要做的是将多个父目录中存在的目录复制到目标,同时保留 \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 中想出一种方法来做到这一点;这就是我在这里的原因。

这篇文章非常接近我想要做的,但是错误的平台: 将多个目录复制到多个目标目录中

谢谢

标签: powershelldirectorytreewindows-10copy

解决方案


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

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\1
\Releases\app_26.6.2.456\Patch\2

# 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]"

推荐阅读