有人可以向我解释这个结果吗?多年来我试图掌握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>
Run Code Online (Sandbox Code Playgroud)
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"
Run Code Online (Sandbox Code Playgroud)
如果您使用该命令行(在由 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"
Run Code Online (Sandbox Code Playgroud)
至于为什么 .NET 或 C++ 启动代码以这种方式解析命令行,我并不完全确定。这个MSDN 主题对此进行了一些介绍,如果您查看该主题底部的示例,您将看到一些同样奇怪的解析行为,例如a\\\b d"e f"g h给出a\\\b,de fg和h。
| 归档时间: |
|
| 查看次数: |
3222 次 |
| 最近记录: |