转义PowerShell和cmd中的空格

时间:2016-02-25 15:10:05

标签: powershell

我有一个PowerShell脚本,它从命令行调用.exe来创建XML文件,然后PowerShell脚本正在读取该文件。

问题是如果我在文件路径中有 space ,我需要用双引号括起来将它传递给命令行。当我这样做时,PowerShell命令尝试读取双引号作为文件路径的一部分。有没有办法逃避那些将它传递给命令行并在PowerShell中使用命令的空间?

为一个命令拉出双引号并将它们留给另一个命令似乎很愚蠢。

问题在于Get-Content行不喜欢双引号。

$outputpath = '"C:\Users\bob\Desktop\output new.xml"'
Start -FilePath $sqlpackage -ArgumentList "/action:DeployReport /SourceFile:$dacpacpath /Profile:$profilepath /OutputPath:$outputpath" -NoNewWindow -Wait

[xml]$xmldocument = Get-Content -Path $outputpath

2 个答案:

答案 0 :(得分:3)

Deadly-Bagel almost had it我想。不要在$ outputpath中使用双引号来保持Get-Content满意,而是将它们添加到参数列表字符串中。

一定要用反击来逃避。实际上,您可能只想对所有路径执行此操作:

$outputpath = 'C:\Users\bob\Desktop\output new.xml'
Start -FilePath $sqlpackage -ArgumentList "/action:DeployReport /SourceFile:`"$dacpacpath`" /Profile:`"$profilepath`" /OutputPath:`"$outputpath`"" -NoNewWindow -Wait

[xml]$xmldocument = Get-Content -Path $outputpath

答案 1 :(得分:1)

-ArgumentList接受String[],请尝试以下操作:

$outputpath = "C:\Users\bob\Desktop\output new.xml"

Start -FilePath $sqlpackage -ArgumentList @("/action:DeployReport", "/SourceFile:$dacpacpath", "/Profile:$profilepath", "/OutputPath:$outputpath") -NoNewWindow -Wait

我怀疑将其全部传递为一个参数导致它混淆。