PowerShell命令行参数和' - '

时间:2013-04-03 06:17:27

标签: powershell command-line powershell-v2.0

无论出于何种原因,当我尝试调用我正在编写的C#程序时,我尝试在命令行中使用' - '传递两个参数,PowerShell不会使用我的命令行调用该程序。 / p>

例如,我正在提供命令行:

.\abc.exe foo.txt -- bar --

当我调用它时,C#程序的main只获取命令行参数:

foo.txt bar --

而不是

foo.txt -- bar --

正如预料的那样。

为什么会这样?

BTW,如果我把它称为:

.\abc.exe foo.txt '--' bar '--'

它按预期工作。

另外,将其称为:

& .\abc.exe foo.txt -- bar --

似乎没有帮助。

我认为这是一个PowerShell奇怪的原因是,如果我从CMD.EXE运行相同的命令行,一切都按预期工作。

3 个答案:

答案 0 :(得分:6)

双连字符指示PowerShell将后面的所有内容视为文字参数而不是选项,以便您可以将文字-foo传递给脚本/ application / cmdlet。

示例:

PS C:\> echo "-bar" | select-string -bar
Select-String : A parameter cannot be found that matches parameter name 'bar'.
At line:1 char:28
+ "-bar" | select-string -bar <<<<
    + CategoryInfo          : InvalidArgument: (:) [Select-String], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SelectStringCommand

VS

PS C:\> echo "-bar" | select-string -- -bar

-bar

要避免此行为,您必须引用("--"'--')或转义(`--)双连字符。

答案 1 :(得分:6)

使用PowerShell 3,您可以使用--%来停止PowerShell正常解析。

.\abc.exe --% foo.txt -- bar --

答案 2 :(得分:-2)

哇。有时我真的很讨厌PowerShell。似乎解释器正在考虑' - '是减量运算符或其他东西。如果我将转义字符放在 - 参数之前,即使用命令行:

.\abc.exe foo.txt `-- bar `--
一切都很顺利。

正如我所说,有时我真的很讨厌PowerShell。