如何使用具有多个过滤值的副本?
例如,如果我仅指定 1 个值进行过滤 (*.jpg),它就可以工作
Copy-Item -Path Y:\TEST -Recurse -Filter *.jpg -Destination D:\Users\MS5253\Desktop\Lots
这将创建一个仅包含 jpg 文件的文件夹(D:\Users\MS5253\Desktop\Lots\TEST)
但我也想过滤 xml 文件,我尝试了这个:
Copy-Item -Path Y:\TEST -Recurse -Filter *.jpg,*.xml -Destination D:\Users\MS5253\Desktop\Lots
它给了我一个错误。
和这个 :Copy-Item -Path Y:\TEST -Recurse -include "*.jpg","*.xml" -Destination D:\Users\MS5253\Desktop\Lots
它不起作用...
感谢您的帮助,我正在使用带有 Powershell v4 的 Windows 7。
答案1
如果希望将所有 jpg 和 xml 文件放入一个文件夹中,可以使用Get-ChildItem -Include
:
Get-ChildItem -Include *.jpg,*.xml -Recurse | ForEach-Object {
Copy-Item -Path $_.FullName -Destination D:\Users\MS5253\Desktop\Lots
}
答案2
如果您需要保留文件夹结构,似乎除了手动路径管理之外没有其他方法:
function Copy-Filtered {
param (
[string] $Source,
[string] $Target,
[string[]] $Filter
)
$ResolvedSource = Resolve-Path $Source
$NormalizedSource = $ResolvedSource.Path.TrimEnd([IO.Path]::DirectorySeparatorChar) + [IO.Path]::DirectorySeparatorChar
Get-ChildItem $Source -Include $Filter -Recurse | ForEach-Object {
$RelativeItemSource = $_.FullName.Replace($NormalizedSource, '')
$ItemTarget = Join-Path $Target $RelativeItemSource
$ItemTargetDir = Split-Path $ItemTarget
if (!(Test-Path $ItemTargetDir)) {
[void](New-Item $ItemTargetDir -Type Directory)
}
Copy-Item $_.FullName $ItemTarget
}
}