2012-01-18 44 views
11

誰かがこの結果を私に説明することはできますか?コマンドを呼び出すためのPowerShellの構文を習得しようと何年もの時間を無駄にしていましたが、これは...入力からこの結果を得る方法を推測することさえできません。PowerShellの呼び出し演算子(&)の構文と二重引用符

PS C:\Users\P> & echoargs " ""1"" 2 3 ""4 5 6"" 7 8 9" 
Arg 0 is < 1 2 3 4> 
Arg 1 is <5> 
Arg 2 is <6 7 8 9> 

Bueller?

+0

これは使用しているエコーログですか? http://weblogs.asp.net/jgalloway/archive/2006/01/27/436713.aspx – ravikanth

+0

Keithの答えをご覧ください。私は先週、PSCXの "public drop"をインストールしました。私は彼がそれ以来それを更新したと思う。 –

+0

良い質問btw。 Powershellの引数渡しの変化を示します。しかし、echoargを呼び出すだけで同じことが分かるので、実際には '&'についてではありません。 – manojlds

答えて

4

二重引用符で囲まれた二重引用符は、二重引用符を挿入する方法です。あなたはコマンドラインが(それはPowerShellので解析された後に)あなたが得ることを取る場合

PS> echoargs " ""1"" 2 3 ""4 5 6"" 7 8 9" 
Arg 0 is < 1 2 3 4> 
Arg 1 is <5> 
Arg 2 is <6 7 8 9> 

Command line: 
"C:\...\Modules\Pscx\Apps\EchoArgs.exe" " "1" 2 3 "4 5 6" 7 8 9" 

:それはあなたのexeファイルを呼び出すために使用するコマンドラインを示してechoargs.exeの更新バージョンは、もう少し明確にこれを示していCMD.EXEで同じ結果:ところで、私は全くわからないんだけど、コマンドラインを解析し、なぜ.NETまたはC++起動コードについては

CMD> EchoArgs.exe " "1" 2 3 "4 5 6" 7 8 9" 
Arg 0 is < 1 2 3 4> 
Arg 1 is <5> 
Arg 2 is <6 7 8 9> 

Command line: 
C:\...\Modules\Pscx\Apps\EchoArgs.exe " "1" 2 3 "4 5 6" 7 8 9" 

。このMSDN topicはそれを少しカバーしています。トピックの一番下の例を見ると、同じように奇妙な構文解析の動作がいくつか見られます。 a\\\b d"e f"g hは、a\\\b,de fgおよびhとなる。

2

、それはアプリケーションに引数を渡すと言ったの引数を引用することになるとPowerShellのは、いくつかの重いバグのために知られていることに注意してください - http://connect.microsoft.com/PowerShell/feedback/details/376207/executing-commands-which-require-quotes-and-variables-is-practically-impossible

これは、私はそれが(MIS)されているかを理解する方法ですが解析:

を文字列は" ""1"" 2 3 ""4 5 6"" 7 8 9"

のバグのため、二重引用符は二重引用符になります。

文字列は、それが一致引用符と4との最初のセクションでは、次のスペースの前に発生するため、だから<space>1 2 3 4が引数となる

「『1』 2 3 『4 5 6』 7 8 9」のようになるであろう。そうすれば、空間は第2引数になります。その後、スペース、次の部分は別の引数になりますので。ここでも、最初の引数と同じ規則がありますが、6が引用符の前にスペースがないので、6 7 8 9が次の引数になります。

ボトムライン - 外部アプリケーションに渡すPowershellの引数はかなり混乱しています。

+2

V3は複雑な引数を持つ呼び出しEXEを改善します。このブログ記事を参照してください:http://rkeithhill.wordpress.com/2012/01/02/powershell-v3-ctp2-provides-better-argument-passing-to-exes/ –

関連する問題