Get-ChildItem
vous permet de lister les fichiers et répertoires, y compris récursivement avec des filtres de nom de fichier. Copy-Item
vous permet de copier un fichier.
Il y a beaucoup de chevauchements en termes de sélection des fichiers, souvent Copy-Item
seul est suffisant en fonction des détails de ce dont vous avez besoin (par exemple. Voulez-vous conserver la structure des dossiers?)
Pour copier tout *.foo
et *.bar
de StartFolder vers DestFolder:
Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder"
Si vous devez conserver la structure du dossier, les choses deviennent plus difficiles, car vous devez créer le nom du dossier de destination, quelque chose comme:
$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
}
Mais robocopy
est susceptible d'être plus facile:
robocopy StartFolder DestFolder *.foo *.bar /s
En fin de compte, la façon de choisir dépendra des détails de ce qui est nécessaire.
(Dans ce qui précède, j'ai évité les alias (par exemple Copy-Item
plutôt que copy
) et j'utilise explicitement les noms de paramètres même s'ils sont positionnels.)