如何将带空格的字符串传入PowerShell?

时间:2015-02-04 00:06:42

标签: powershell

假设:

# test1.ps1
param(
    $x = "",
    $y = ""
)

&echo $x $y

像这样使用:

powershell test.ps1

输出:

> <blank line>

但后来出现了问题:

test.ps1 -x "hello world" -y "my friend"

输出:

hello
my

我期待看到:

hello world my friend

4 个答案:

答案 0 :(得分:19)

嗯,这是一个cmd.exe问题,但有一些方法可以解决它。

  1. 使用单引号

    powershell test.ps1 -x 'hello world' -y 'my friend'
    
  2. 使用-file参数

    powershell -file test.ps1 -x "hello world" -y "my friend"
    
  3. 使用以下内容创建.bat包装

    @rem test.bat
    @powershell -file test.ps1 %1 %2 %3 %4
    

    然后叫它:

    test.bat -x "hello world" -y "my friend"
    

答案 1 :(得分:1)

今天随机找到了这个;您可以使用反引号`来转义空格:

PS&C:\ Program` Files \ ....

以防万一有人再次跌倒

答案 2 :(得分:1)

在我的情况下,可能的解决方案是嵌套单引号和双引号。

test.ps1 -x '"Hello, World!"' -y '"my friend"'

答案 3 :(得分:0)

我遇到了类似的问题,但就我而言,我试图运行cmdlet,并且该调用是在Cake脚本中进行的。在这种情况下,单引号和-file参数无效:

powershell Get-AuthenticodeSignature 'filename with spaces.dll'

产生的错误:Get-AuthenticodeSignature : A positional parameter cannot be found that accepts argument 'with'.

我想尽可能避免使用批处理文件。

解决方案

起作用的是使用带有/ S的cmd包装器来解开外部引号:

cmd /S /C "powershell Get-AuthenticodeSignature 'filename with spaces.dll'"