PowerShell command line parameters and '--'

房东的猫 提交于 2019-12-01 15:06:10

问题


For whatever reason, when I try to call a C# program I'm writing, and I try to pass two arguments with '--' in the command line, PowerShell doesn't call the program with my command line.

For instance, I'm providing the command line:

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

When I call this, the C# program's main only gets the command line arguments:

foo.txt bar --

instead of

foo.txt -- bar --

as would be expected.

Why would this be happening?

BTW, if I call it as:

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

it works as expected.

Also, calling it as:

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

Doesn't seem to help.

My reason for thinking this is a PowerShell weirdness is that if I run the same command line from CMD.EXE, everything works as expected.


回答1:


A double hyphen instructs PowerShell to treat everything coming after as literal arguments rather than options, so that you can pass for instance a literal -foo to your script/application/cmdlet.

Example:

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

To avoid this behavior you must either quote ("--", '--') or escape (`--) the double hyphen.




回答2:


With PowerShell 3 you can use --% to stop the normal parsing PowerShell does.

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



回答3:


Wow. Sometimes I really hate PowerShell. It seems that the interpreter is thinking '--' is the decrement operator or something. If I put the escape character before the -- parameters, i.e. use the command line:

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

all is well.

As I said, sometimes I really hate PowerShell.



来源:https://stackoverflow.com/questions/15780174/powershell-command-line-parameters-and

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!