[英]PowerShell to copy files to destination's subfolders while excluding certain folders in the destination
因此,我整天都在不停地跳着舞,而永不過時的一句“給貓剝皮的方法不止一種”,讓我決定加入社區。
場景:
源文件夾“ C:\\ Updates”具有100個各種擴展名的文件。 僅將所有內容復制到“ C:\\ Prod \\”的子文件夾中 ,從而覆蓋所有可能找到的重復項。
注意事項:
“ C:\\ Prod”中的子文件夾名稱(目的地)非常動態並且經常更改。
使用命名約定來確定在復制源文件(保留原始版本)時需要排除目標中的哪些子文件夾。 為了便於說明,可以說任何以“!stop”開頭的文件夾名稱都應排除在復制過程之外。 (!停止*,如果考慮使用通配符)
所以,在這里,如果我很幸運,我希望得到比我更多的人來解決PS中的問題。 我今天對Copy-Item和xcopy進行了修改,因此很高興聽到其他人的輸入。
謝謝!
-克里斯
試一下:
Get-ChildItem -Path C:\Prod -Exclude !stop* -Directory `
| ForEach-Object { Copy-Item -Path C:\Updates\* -Destination $_ -Force }
這將抓取與過濾器不匹配的C:\\ Prod中的每個文件夾( -Directory
開關確保僅抓取文件夾),並將其通過管道傳遞到ForEach-Object
命令,在此我們運行Copy-Item
命令將文件復制到目錄。
-Directory
開關並非在所有版本的PowerShell中都可用; 我不知道它是哪個版本推出的。 如果您使用的舊版PowerShell不支持-Directory
則可以使用以下腳本:
Get-ChildItem -Path C:\Prod -Exclude !stop* `
| Where-Object { $_.PSIsContainer } `
| ForEach-Object { Copy-Item -Path C:\Updates\* -Destination $_ -Force }
要僅選擇不以“!stop”開頭的子文件夾,請執行此操作
$Source = "C:\Updates\*"
$Dest = "C:\Prod"
$Stop = "^!stop"
$Destinations = GCI -Path $Dest |?{$_.PSIsContainer -and $_.Name -notmatch $Stop }
ForEach ($Destination in $Destinations) {
Copy-Item -Path $Source -Destination $Destination.FullName -Force
}
立即編輯將所有文件從Update復制到Source的子目錄中,而不以“!stop”開頭。-whatif開關顯示將發生的情況,以備腳本刪除-whatif。
Edit2簡化了腳本。 如果C:\\ Prod的子/子文件夾也將收到副本,則在管道前面的gci包含-rec選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.