Get-ChildItem
позволяет Вам перечислять файлы и каталоги, включая рекурсивно с фильтрами имени файла. Copy-Item
позволяет Вам копировать файл.
Существует много перекрытия с точки зрения выбора файлов, часто Copy-Item
самостоятельно достаточно в зависимости от деталей того, в чем Вы нуждаетесь (например, Вы хотите сохранить структуру папок?)
Скопировать все *.foo
и *.bar
от StartFolder до DestFolder:
Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder"
Если необходимо сохранить вещи структуры папок, становятся более твердыми, потому что необходимо создать имя папки назначения, что-то как:
$sourcePath = 'C:\StartFolder'
$destPath = 'C:\DestFolder'
Get-ChildItem $sourcePath -Recurse -Include '*.foo', '*.bar' | Foreach-Object `
{
$destDir = Split-Path ($_.FullName -Replace [regex]::Escape($sourcePath), $destPath)
if (!(Test-Path $destDir))
{
New-Item -ItemType directory $destDir | Out-Null
}
Copy-Item $_ -Destination $destDir
}
Но robocopy
вероятно, будет легче:
robocopy StartFolder DestFolder *.foo *.bar /s
В конце способ выбрать будет зависеть от деталей того, что необходимо.
(В вышеупомянутом я избежал псевдонимов (например. Copy-Item
вместо copy
) и явно используйте названия параметра, даже если они позиционны.)