1

是的,这些文件的文件名中确实有引号。!!

我正在尝试使用 powershell 脚本运行 bat 文件。Powershell 脚本遍历文件夹并提取文件。然后它将这些文件名传递给调用 exe 来处理它们的批处理脚本。

这是powershell脚本的样子,

$path = "\\RemoteMachine\Japanese\files"
$filter = "*.msg"
$count = 0

Write-Host "Parsing started...";
get-childitem -recurse -path $path -filter $filter| % {
    $count++;
    & "C:\Users\uname\myfolder\runCommads.bat" "$($_.FullName)" "C:\Users\uname\myfolder\output\$count.txt"

}

输入文件是使用不同的语言编写的。某些文件的名称由引号组成。当 PS 脚本运行 runCommand.bat 时,文件名中包含的空格会被误解。空格后面的 Word 被视为不同文件的名称。

但是,如果我在没有 PS 脚本的情况下运行批处理文件,那么对于一个文件名中包含引号的文件,就会给出预期的输出。

有人可以帮我解决这个问题吗?谢谢

4

1 回答 1

1

这似乎是批处理文件的问题,而不是 powershell 脚本的问题。

通常批处理解析器在空格处分割参数。
它可以通过使用引号来抑制,但如果您的文件名本身包含引号,它将再次失败。

但是您可以将文件名中的所有引号(在 powershell 脚本内)加倍,
然后应该可以在批处理文件中获得正确的文件名。

在批处理中,您需要删除双引号,但这似乎很容易。

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

但我想,大多数批处理命令都会因此类文件名而失败。

于 2012-06-15T11:57:10.973 回答