PowerShell命令行参数和“ - ”(PowerShell command line para

2019-08-19 04:34发布

无论出于何种原因,当我尝试调用C#程序我写的,我试图通过两个参数与“ - ”在命令行,PowerShell不叫我的命令行程序。

举例来说,我提供的命令行:

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

当我把这个,在C#程序的主只得到命令行参数:

foo.txt bar --

代替

foo.txt -- bar --

正如所预料的。

为什么会这样发生?

顺便说一句,如果我叫它为:

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

它按预期工作。

此外,称其为:

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

似乎并没有帮助。

我的思考这个原因是一个PowerShell的怪事是,如果我从CMD.EXE运行相同的命令行,一切正常。

Answer 1:

双连字符指示PowerShell来对待一切,文字形参,而不是选择之后到来,这样就可以通过例如文字-foo到脚本/应用/小命令。

例:

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

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

-bar

为了避免这种行为,你必须要么引号( "--"'--' )或逃生( `--双连字符。



Answer 2:

随着PowerShell的3 ,你可以使用--%停止正常解析PowerShell的呢。

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


Answer 3:

哇。 有时候,我真的很讨厌的PowerShell。 这似乎解释想着“ - ”是减运算符什么的。 如果我把转义字符的前 - 参数,即使用命令行:

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

一切都很好。

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



文章来源: PowerShell command line parameters and '--'