[英]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.