Estoy usando el script de PowerShell de esta respuesta para hacer una copia de archivo. El problema surge cuando quiero incluir varios tipos de archivos usando el filtro.
Get-ChildItem $originalPath -filter "*.htm" | `
foreach{ $targetFile = $htmPath + $_.FullName.SubString($originalPath.Length); `
New-Item -ItemType File -Path $targetFile -Force; `
Copy-Item $_.FullName -destination $targetFile }
funciona como un sueño. Sin embargo, el problema surge cuando quiero incluir varios tipos de archivos usando el filtro.
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 }
Me da el siguiente error:
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
Tengo varias iteraciones de paréntesis, sin paréntesis, -filter
, -include
, definiendo las inclusiones como variable (por ejemplo, $fileFilter
) y cada vez que obtener el error anterior, y siempre apuntando a lo que sigue -filter
.
La excepción interesante a eso es cuando codifico -filter "*.gif,*.jpg,*.xls*,*.doc*,*.pdf*,*.wav*,*.ppt*"
. No hay errores, pero no obtengo ningún resultado y nada de regreso a la consola. Sospecho que sin darme cuenta he codificado a un impícito and
con esa declaración.
Entonces, ¿qué estoy haciendo mal y cómo puedo corregirlo?
\*
truco acaba de resolver unos seis problemas. ¡Genial gracias!