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
) і явно використовую імена параметрів, навіть якщо вони є позиційними.)