Get-ChildItemvous permet de lister les fichiers et répertoires, y compris récursivement avec des filtres de nom de fichier. Copy-Itemvous permet de copier un fichier.
Il y a beaucoup de chevauchements en termes de sélection des fichiers, souvent Copy-Itemseul 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 *.fooet *.barde 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 robocopyest 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-Itemplutôt que copy) et j'utilise explicitement les noms de paramètres même s'ils sont positionnels.)