Get-ChildItem
consente di elencare file e directory, anche ricorsivamente con i filtri dei nomi dei file. Copy-Item
ti permette di copiare un file.
C'è molta sovrapposizione in termini di selezione dei file, spesso Copy-Item
da sola è sufficiente a seconda dei dettagli di ciò di cui hai bisogno (es. Vuoi conservare la struttura delle cartelle?)
Per copiare tutto *.foo
e *.bar
da StartFolder a DestFolder:
Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder"
Se è necessario preservare la struttura delle cartelle, le cose diventano più difficili perché è necessario creare il nome della cartella di destinazione, ad esempio:
$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
}
Ma robocopy
è probabile che sia più semplice:
robocopy StartFolder DestFolder *.foo *.bar /s
Alla fine il modo di scegliere dipenderà dai dettagli di ciò che è necessario.
(In precedenza ho evitato gli alias (ad es. Copy-Item
Anziché copy
) e uso esplicitamente i nomi dei parametri anche se sono posizionali.)