假设:
# 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
答案 0 :(得分:19)
嗯,这是一个cmd.exe
问题,但有一些方法可以解决它。
使用单引号
powershell test.ps1 -x 'hello world' -y 'my friend'
使用-file
参数
powershell -file test.ps1 -x "hello world" -y "my friend"
使用以下内容创建.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'"