Get-ChildItem
le permite enumerar archivos y directorios, incluso de forma recursiva con filtros de nombre de archivo. Copy-Item
le permite copiar un archivo.
Hay mucha superposición en términos de selección de archivos, a menudo Copy-Item
por sí solo es suficiente dependiendo de los detalles de lo que necesita (por ejemplo, ¿desea conservar la estructura de la carpeta?)
Para copiar todo *.foo
y *.bar
desde StartFolder a DestFolder:
Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder"
Si necesita preservar la estructura de la carpeta, las cosas se ponen más difíciles porque necesita construir el nombre de la carpeta 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
}
Pero robocopy
es probable que sea más fácil:
robocopy StartFolder DestFolder *.foo *.bar /s
Al final, la forma de elegir dependerá de los detalles de lo que se necesita.
(En lo anterior he evitado los alias (por ejemplo, en Copy-Item
lugar de copy
) y uso explícitamente los nombres de los parámetros, incluso si son posicionales).