我想要做的是將多個父目錄中存在的目錄復制到目標,同時保留 \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 中執行此操作時受到了傷害;這就是我在這里的原因。
這篇文章非常接近我想要做的,但錯誤的平臺: 將多個目錄復制到多個目標目錄中
謝謝
uj5u.com熱心網友回復:
我假設每個源補丁有多個目的地?嘗試這樣的事情,在名稱中通配版本號:
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]"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/351182.html
下一篇:有人可以檢查代碼它不起作用嗎
