Windows

具有多個過濾器的複制項

  • May 7, 2021

如何使用帶有多個過濾器值的副本?

例如,如果我只指定 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。

如果您希望將所有 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
   }
}

引用自:https://serverfault.com/questions/707085