Tôi đang sử dụng tập lệnh PowerShell từ câu trả lời này để sao chép tệp. Sự cố phát sinh khi tôi muốn bao gồm nhiều loại tệp bằng cách sử dụng bộ lọc.
Get-ChildItem $originalPath -filter "*.htm" | `
foreach{ $targetFile = $htmPath + $_.FullName.SubString($originalPath.Length); `
New-Item -ItemType File -Path $targetFile -Force; `
Copy-Item $_.FullName -destination $targetFile }
hoạt động như một giấc mơ. Tuy nhiên, vấn đề phát sinh khi tôi muốn bao gồm nhiều loại tệp bằng cách sử dụng bộ lọc.
Get-ChildItem $originalPath `
-filter "*.gif","*.jpg","*.xls*","*.doc*","*.pdf*","*.wav*",".ppt*") | `
foreach{ $targetFile = $htmPath + $_.FullName.SubString($originalPath.Length); `
New-Item -ItemType File -Path $targetFile -Force; `
Copy-Item $_.FullName -destination $targetFile }
Cung cấp cho tôi lỗi sau:
Get-ChildItem : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Filter'. Specified method is not supported.
At F:\data\foo\CGM.ps1:121 char:36
+ Get-ChildItem $originalPath -filter <<<< "*.gif","*.jpg","*.xls*","*.doc*","*.pdf*","*.wav*",".ppt*" | `
+ CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.GetChildItemCommand
Tôi có lặp khác nhau của dấu ngoặc đơn, không có dấu ngoặc đơn, -filter
, -include
định vùi như biến (ví dụ $fileFilter
) và mỗi lần nhận được lỗi trên, và luôn luôn trỏ đến bất cứ điều gì sau -filter
.
Ngoại lệ thú vị đó là khi tôi viết mã -filter "*.gif,*.jpg,*.xls*,*.doc*,*.pdf*,*.wav*,*.ppt*"
. Không có lỗi, nhưng tôi và không nhận được kết quả và không có gì trở lại bảng điều khiển. Tôi nghi ngờ tôi đã vô tình mã hóa một and
điều không đúng với tuyên bố đó?
Vậy tôi đang làm gì sai, và làm thế nào để tôi có thể sửa nó?
\*
Thủ thuật đó vừa giải quyết được khoảng sáu vấn đề. Thật sự cảm ơn!