Я использую сценарий PowerShell из этого ответа для копирования файла. Проблема возникает, когда я хочу включить несколько типов файлов с помощью фильтра.
Get-ChildItem $originalPath -filter "*.htm" | `
foreach{ $targetFile = $htmPath + $_.FullName.SubString($originalPath.Length); `
New-Item -ItemType File -Path $targetFile -Force; `
Copy-Item $_.FullName -destination $targetFile }
работает как мечта. Однако проблема возникает, когда я хочу включить несколько типов файлов с помощью фильтра.
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 }
Выдает мне следующую ошибку:
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
У меня есть различные итерации скобок, без скобок -filter
, -include
, определение включений как переменной (например, $fileFilter
) и каждый раз получаю вышеуказанную ошибку, и всегда указывает на то , что следует -filter
.
Интересное исключение - это когда я кодирую -filter "*.gif,*.jpg,*.xls*,*.doc*,*.pdf*,*.wav*,*.ppt*"
. Ошибок нет, но я так и не получаю результатов и ничего не возвращаю в консоль. Я подозреваю, что я нечаянно закодировал это утверждение неявно and
?
Так что я делаю не так и как это исправить?
\*
трюк только что решил около шести проблем. Отлично и спасибо!