如何在命令行参数中正确地转义空格和反斜杠?

时间:2016-03-02 14:55:12

标签: powershell command-line arguments escaping

我在PowerShell中将一个字符串数组传递给命令时遇到了一些问题,所以我调试了我的脚本。我正在使用PowerShell Community Extension Project (PSCX)中的 EchoArgs.exe 程序。 如果我执行这个脚本:

Import-Module Pscx
cls

$thisOne = 'this_one\';
$secondOne = 'second one\';
$lastOne = 'last_one'

$args = $thisOne `
    , "the $secondOne" `
    , "the_$lastOne"


EchoArgs $args

我得到了这个结果:

Arg 0 is <this_one\>
Arg 1 is <the second one" the_last_one>

Command line:
"C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\Pscx\Apps\EchoArgs.exe"  this_one\ "the second one\" the_last_one

似乎如果一个字符串包含空格,则最后一个反斜杠会转义双引号。事实上,如果我只是逃避反斜杠,那么一切似乎都有效:

Import-Module Pscx
cls

$thisOne = 'this_one\';
$secondOne = 'second one\\';
$lastOne = 'last_one'

$args = $thisOne `
    , "the $secondOne" `
    , "the_$lastOne"


EchoArgs $args

有了这个结果:

Arg 0 is <this_one\>
Arg 1 is <the second one\>
Arg 2 is <the_last_one>

Command line:
"C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\Pscx\Apps\EchoArgs.exe"  this_one\ "the second one\\" the_last_one

是否有&#34; smart&#34;在PowerShell(即cmdlet)中转义任何字符串以避免此类问题的方法?

1 个答案:

答案 0 :(得分:1)

请尝试使用Start-Process。它有一个$Arguments参数,可以更好地适应这一点。

见这里:PowerShell - Start-Process and Cmdline Switches