如何像Environment.GetCommandLineArgs()那样解析命令行参数

本文关键字:命令行 参数 何像 Environment GetCommandLineArgs | 更新日期: 2023-09-27 18:00:03

我正在使用COM"Windows脚本主机对象模型"IWshRuntimeLibrary读取一个快捷方式,如下所示:

IWshShell wsh = new WshShellClass();
IWshShortcut sc = (IWshShortcut)wsh.CreateShortcut(shortcutFile);
string arguments = sc.Arguments;

这给了我来自快捷方式的论点,说它看起来像:

-a "c:'temp'a 1.txt" -b "b.exe -c '"c:'temp'c -2.txt'" -d d.txt" -e test

这并不像你想象的那样是一个人为的例子。。。我如何做与GetCommandLineArgs相同的操作并获得:

args {string[6]}
[0] = "-a"
[1] = "c:''temp''a 1.txt"
[2] = "-b"
[3] = "b.exe -c '"c:''temp''c -2.txt'" -d d.txt"
[4] = "-e"
[5] = "test"

我在想Regex,但这超出了我的范围。

[edit]我更喜欢regex,但我会看看上面提到的代码和类。

规则似乎是:

  • 在空间上拆分
  • 除非空格位于双引号(")内
  • 双引号内的字符串可能包含用反斜杠(''")转义的双引号
  • 其他反斜杠可能单独出现,但应视为正常字符

前两个代码部分中的参数和数组将是一个合适的测试。

[编辑]https://stackoverflow.com/a/749653/350188已经回答了我的问题。它调用本机系统函数,并为我提供与GetCommandLineArgs()完全相同的结果:

string[] splitArguments = CommandLineToArgs(arguments);

如何像Environment.GetCommandLineArgs()那样解析命令行参数

这并没有什么真正棘手的地方。您可以使用基本的C#语法来检查各个字符,并解析出您需要的内容。

例如,可以使用String.IndexOf()来定位要查找的特定字符。您可以使用String.Substring()来提取字符串的一部分。

我在文章C#命令行解析器中发布了解析命令行的代码。

最简单和稳健的解决方案是使用解析器的一些实现,例如,这个解析器或类似命令行解析器库的库取决于您的应用程序中到底需要什么。

如果您只是想在GetCommandLineArgs生成的数组中使用参数,可以使用字符串。拆分:

string[] args = arguments.Split(' ');