我有一个批处理文件test.bat来启动powershell脚本:
@pushd "C:\myscripts"
powershell .\test.ps1 arg1 "arg2 with space" arg3
@popd
脚本test.ps1(位于C:\ myscripts)非常简单,如:
# just print out the arguments
Write-Output ("args count: {0}" -f $args.length)
$args
然后我尝试启动test.bat。我应该将三个参数传递给ps1但是得到了以下结果:
算数:5 ARG1 ARG2 同 空间 ARG3
我在脚本中的预期,args [0]应该是arg1和args [1]应该是“arg2 with space”而args3 [2]应该是arg3。我无法理解为什么脚本实际上有5个参数。
如何按照我的预期将cmd或batch中的参数传递给powershell?像这样:
args count: 3
arg1
arg2 with space
arg3
答案 0 :(得分:7)
powershell .\test.ps1 arg1 'arg2 with space' arg3
或
powershell .\test.ps1 arg1 """arg2 with space""" arg3
我认为你应该尽量避免使用双引号,因为cmd也已经使用过它们,因此有点难以预测PowerShell会得到什么。请记住,这会通过两个 shell传递,因此会有两层转义/引用。
PowerShell本身并没有区分单引号和双引号。至少在这种情况下,差异是无关紧要的。
答案 1 :(得分:0)
行。我想我明白了:
@pushd "C:\myscripts"
powershell .\test.ps1 arg1 'arg2 with space' arg3
@popd
单引号char而不是double one。也许他们在PS中意味着不同的东西。