12

なんらかの理由で、作成中の C# プログラムを呼び出そうとすると、コマンド ラインで '--' を使用して 2 つの引数を渡そうとすると、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 から同じコマンド ラインを実行すると、すべてが期待どおりに機能するからです。

4

2 に答える 2

12

2 つのハイフンは、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

この動作を回避するには、二重ハイフンを引用符 ( "--", '--') またはエスケープ ( ) する必要があります。`--

于 2013-04-03T12:58:26.560 に答える
8

PowerShell 3では--%、PowerShell が行う通常の解析を停止するために使用できます。

.\abc.exe --% foo.txt -- bar --
于 2013-05-04T16:21:00.453 に答える