Używam skryptu PowerShell z tej odpowiedzi, aby wykonać kopię pliku. Problem pojawia się, gdy chcę uwzględnić wiele typów plików za pomocą filtru.
Get-ChildItem $originalPath -filter "*.htm" | `
foreach{ $targetFile = $htmPath + $_.FullName.SubString($originalPath.Length); `
New-Item -ItemType File -Path $targetFile -Force; `
Copy-Item $_.FullName -destination $targetFile }
działa jak sen. Jednak problem pojawia się, gdy chcę dołączyć wiele typów plików za pomocą filtru.
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 }
Daje mi następujący błąd:
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
Mam różne iteracje nawiasach, bez nawiasów -filter
, -include
definiującą inkluzje jako zmienna (na przykład $fileFilter
) i za każdym razem pojawia się błąd powyżej, i zawsze wskazując co następuje -filter
.
Ciekawym wyjątkiem jest sytuacja, gdy koduję -filter "*.gif,*.jpg,*.xls*,*.doc*,*.pdf*,*.wav*,*.ppt*"
. Nie ma błędów, ale ja i nie otrzymuję wyników i nic nie wracam do konsoli. Podejrzewam, że nieumyślnie zakodowałem nielegalne and
oświadczenie?
Więc co robię źle i jak mogę to poprawić?
\*
sztuczka właśnie rozwiązała około sześciu problemów. Wielkie dzieki!