Get-ChildItem
cho phép bạn liệt kê các tệp và thư mục, bao gồm đệ quy với các bộ lọc tên tệp. Copy-Item
cho phép bạn sao chép một tập tin.
Có rất nhiều sự trùng lặp về mặt lựa chọn các tệp, thường thì Copy-Item
nó là đủ tùy thuộc vào chi tiết của những gì bạn cần (ví dụ: bạn có muốn giữ lại cấu trúc thư mục không?)
Để sao chép tất cả *.foo
và *.bar
từ StartFolder sang DestFolder:
Copy-Item -path "StartFolder" -include "*.foo","*.bar" -Destination "DestFolder"
Nếu bạn cần bảo toàn cấu trúc thư mục, mọi thứ trở nên khó khăn hơn vì bạn cần xây dựng tên thư mục đích, đại loại như:
$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
}
Nhưng robocopy
có khả năng sẽ dễ dàng hơn:
robocopy StartFolder DestFolder *.foo *.bar /s
Cuối cùng, cách chọn sẽ phụ thuộc vào chi tiết của những gì cần thiết.
(Trong phần trên tôi đã tránh các bí danh (ví dụ như Copy-Item
thay vì copy
) và sử dụng rõ ràng tên tham số ngay cả khi chúng là vị trí.)