Назад | Перейти на главную страницу

Копируемый элемент с множественным фильтром

Как я могу использовать копию с несколькими значениями фильтра?

Например, это сработает, если я укажу только 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
    }
}