Get-ChildItem
pozwala wyświetlić listę plików i katalogów, w tym rekurencyjnie z filtrami nazw plików. Copy-Item
pozwala skopiować plik.
Istnieje wiele nakładek w zakresie wybierania plików, często Copy-Item
samo w sobie jest wystarczające w zależności od szczegółów tego, czego potrzebujesz (np. Czy chcesz zachować strukturę folderów?)
Aby skopiować wszystko *.foo
i *.bar
z StartFolder do DestFolder:
Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder"
Jeśli chcesz zachować strukturę folderów, sprawy stają się trudniejsze, ponieważ musisz zbudować nazwę folderu docelowego, na przykład:
$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
}
Ale robocopy
prawdopodobnie będzie łatwiej:
robocopy StartFolder DestFolder *.foo *.bar /s
Ostatecznie sposób wyboru zależy od szczegółów tego, co jest potrzebne.
(W powyższym unikałem aliasów (np. Copy-Item
Zamiast copy
) i jawnie używam nazw parametrów, nawet jeśli są one pozycyjne.)