/ / Powershell no entiende las comillas en un nombre de archivo - powershell, batch-file, filenames

Powershell no entiende las comillas en un nombre de archivo: powershell, batch-file, filenames

Sí, estos archivos tienen comillas en el nombre del archivo.

Estoy tratando de ejecutar un archivo bat usando un powershellguión. El script de Powershell recorre una carpeta y extrae archivos. Luego pasa estos nombres de archivo a la secuencia de comandos de proceso por lotes que llama a un exe para procesarlos.

Así es como se ve el script de powershell,

$path = "\RemoteMachineJapanesefiles"
$filter = "*.msg"
$count = 0

Write-Host "Parsing started...";
get-childitem -recurse -path $path -filter $filter| % {
$count++;
& "C:UsersunamemyfolderrunCommads.bat" "$($_.FullName)" "C:Usersunamemyfolderoutput$count.txt"

}

Los archivos de entrada se escribieron utilizando una diferenteidioma. Los nombres de algunos archivos consisten en comillas. Cuando el script PS ejecuta runCommand.bat, los espacios que contienen el nombre del archivo se malinterpretan. Una palabra que ocupa un espacio se considera un nombre de un archivo diferente.

Pero si ejecuto el archivo por lotes sin la secuencia de comandos PS, para un solo archivo que contiene comillas en el nombre del archivo, se proporciona la salida esperada.

¿Podría alguien ayudarme con una solución para este problema? Gracias

Respuestas

1 para la respuesta № 1

Esto parece ser un problema del archivo por lotes, no del script powershell.

Normalmente, el analizador de lotes divide los parámetros en espacios.
Se puede suprimir utilizando comillas, pero si su nombre de archivo contiene comillas, volverá a fallar.

Pero podría duplicar todas las comillas en el nombre de archivo (dentro del script de powershell),
entonces debería ser posible obtener los nombres de archivo correctos en el archivo por lotes.

Dentro del lote necesitas eliminar las comillas duplicadas, pero eso parece ser fácil.

set "filename=%~1"
setlocal EnableDelayedExpansion
set "filename=!filename:""="!"

Pero supongo que la mayoría de los comandos por lotes fallarán con tales nombres de archivo.