Как я могу использовать копию с несколькими значениями фильтра?
Например, это сработает, если я укажу только 1 значение для фильтрации (* .jpg)
Copy-Item -Path Y:\TEST -Recurse -Filter *.jpg -Destination D:\Users\MS5253\Desktop\Lots
Это создаст мне папку (D: \ Users \ MS5253 \ Desktop \ Lots \ TEST), которая содержит только файлы jpg
Но я также хочу фильтровать файлы 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
Не работает ...
Спасибо за вашу помощь, я использую Windows 7 с Powershell v4.
Если вы хотите, чтобы все файлы jpg и xml были в одной папке, вы можете использовать Get-ChildItem -Include
:
Get-ChildItem -Include *.jpg,*.xml -Recurse | ForEach-Object {
Copy-Item -Path $_.FullName -Destination D:\Users\MS5253\Desktop\Lots
}
Если вам нужно сохранить структуру папок, похоже, нет другого способа, кроме ручного управления путями:
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
}
}