Powershell误解了文件名中的引号

时间:2012-06-15 11:25:25

标签: powershell batch-file filenames

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

我正在尝试使用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脚本的情况下运行批处理文件,对于只有一个文件名中包含引号的文件,则会给出预期的输出。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

在批处理中你需要删除加倍的引号,但这似乎很容易。

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

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