Get-ChildItem
permite listar arquivos e diretórios, incluindo recursivamente com filtros de nome de arquivo. Copy-Item
permite que você copie um arquivo.
Há muita sobreposição em termos de seleção dos arquivos, muitas vezes Copy-Item
por si só é suficiente dependendo dos detalhes do que você precisa (por exemplo, você deseja manter a estrutura de pastas?)
Para copiar todos os *.foo
e *.bar
de StartFolder para DestFolder:
Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder"
Se você precisa preservar a estrutura de pastas, as coisas ficam mais difíceis porque você precisa criar o nome da pasta de destino, algo como:
$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
}
Mas é provável que robocopy
seja mais fácil:
robocopy StartFolder DestFolder *.foo *.bar /s
No final, a maneira de escolher dependerá dos detalhes do que é necessário.
(acima, evitei aliases (por exemplo, Copy-Item
em vez de copy
) e uso explicitamente nomes de parâmetro, mesmo que sejam posicionais.)