让我们让 PSscript
接受String[][]
的单参数p
。有没有办法,在调用 powershell 时如何在命令行 (cmd
( 上本地传递相当于@(@(1,2), @(a,b))
的等效物?
像这样:
powershell.exe -Command .script -p "(1,2),(a,b)"
我唯一设法做的就是通过"1,2,a,b"
传递String[]
。
如果在参数值两边加上双引号,即使它包含逗号,该值也会被解释为字符串。如果你想要一个字符串数组,你可以引用每个数组的各个元素,使它们成为字符串。允许 PowerShell 将逗号解释为运算符,您将获得成功。您还应该用双引号将PowerShell.exe
的-Command
值括起来,无论是在CMD shell还是PowerShell中调用。
对于您的示例,请使用:
Powershell.exe -Command ".script.ps1 -p (1,2),(a,b)"
对于单个带引号的元素,您可以轻松使用单引号,这不需要转义:
Powershell.exe -Command ".script.ps1 -p ('first','second','third'),('fourth','fifth','sixth')"
顺便说一句,您也可以在技术上使用数组子表达式运算符@()
。
Powershell.exe -Command ".script.ps1 -p @(@(1,2),@(a,b))"
内部双引号方案:
- 内部双引号将需要转义。转义方法因调用外壳而异。
- 对外部程序的 CMD shell 调用需要反斜杠转义
内引号。
PowerShell 对外部程序的调用首先需要反引号转义,然后是反斜杠转义。
使用 CMD 的示例:
Powershell.exe -Command ".script.ps1 -p ("one","two"),("a","b")"
使用 PowerShell 的示例:
Powershell.exe -Command ".script.ps1 -p (`"one`",`"two`"),(`"a`",`"b`")"
About_Operators描述了逗号运算符。作为二进制或一元运算符,它创建一个数组。如果包含逗号的值(对象(被引号括起来,它将是[string]
而不是[object[]]
,因为逗号被视为值的一部分,而不是分隔符或运算符。