J'utilise le script PowerShell script de cette réponse pour effectuer une copie de fichier. Le problème se pose lorsque je souhaite inclure plusieurs types de fichiers à l'aide du filtre.
Get-ChildItem $originalPath -filter "*.htm" | `
foreach{ $targetFile = $htmPath + $_.FullName.SubString($originalPath.Length); `
New-Item -ItemType File -Path $targetFile -Force; `
Copy-Item $_.FullName -destination $targetFile }
fonctionne comme dans un rêve. Cependant, le problème se pose lorsque je veux inclure plusieurs types de fichiers à l'aide du filtre.
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 }
J'obtiens l'erreur suivante :
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
J'ai plusieurs itérations de parenthèses, sans parenthèses, -filter
, -include
définissant les inclusions comme variables (par ex, $fileFilter
) et obtient à chaque fois l'erreur ci-dessus, en pointant toujours vers ce qui suit -filter
.
L'exception intéressante à cette règle est lorsque je code -filter "*.gif,*.jpg,*.xls*,*.doc*,*.pdf*,*.wav*,*.ppt*"
. Il n'y a pas d'erreur, mais je n'obtiens aucun résultat et rien dans la console. Je soupçonne que j'ai codé par inadvertance une erreur de codage. and
avec cette déclaration ?
Qu'est-ce que je fais de travers et comment puis-je y remédier ?