将同一目录从多个父目录复制到多个目标
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]"
我想做的是将存在于多个父目录中的目录复制到目标位置,同时保留 \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]"