![](/img/trans.png)
[英]How can I call a console app requiring a parameter that needs double-quotes from PowerShell script?
[英]PowerShell's call operator (&) syntax and double-quotes
有人可以向我解釋這個結果嗎? 多年來我試圖掌握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?
雙引號字符串中的雙倍引號是插入雙引號的一種方式。 echoargs.exe的更新版本更清楚地顯示了這一點,因為它顯示了用於調用exe的命令行:
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"
如果您使用該命令行(在PowerShell解析之后),您將在CMD.exe中獲得相同的結果:
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"
至於為什么.NET或C ++啟動代碼以這種方式解析命令行,我不完全確定。 這個MSDN主題稍微介紹了一下,如果你看一下主題底部的例子,你會看到一些同樣奇怪的解析行為,例如a\\\\\\bd"ef"gh
給出a\\\\\\b
, de fg
和h
。
請注意,在將參數傳遞給應用程序並引用所述參數時,Powershell因一些重大錯誤而聞名 - http://connect.microsoft.com/PowerShell/feedback/details/376207/executing-commands-which-require-quotes -and變量-是-幾乎不可能的
這就是我理解它是如何(錯誤)解析的:
字符串是" ""1"" 2 3 ""4 5 6"" 7 8 9"
由於這個錯誤,雙引號成為字面雙引號,從來沒有成功。
字符串就像“”1“2 3”4 5 6“7 8 9”
所以<space>1 2 3 4
成為一個參數,因為它是第一個帶有匹配引號的部分,4個出現在下一個空格之前。 然后是空間,因此5成為第二個參數。 然后是空格,所以下一部分將是一個單獨的參數。 在這里,與第一個參數相同的規則,除了6在引用之前發生並且沒有空格因此6 7 8 9
成為下一個參數。
底線 - 傳遞給外部應用程序的Powershell參數非常混亂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.