我如何解析像Environment.GetCommandLineArgs()这样的命令行参数呢?

时间:2013-02-19 15:23:57

标签: c# .net regex

我正在使用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]我更喜欢正则表达式,但我会看一下上面提到的代码和类。

规则似乎是:

  • 拆分空格
  • 除非空格在双引号(“)之内。
  • 双引号内的字符串可能包含使用反斜杠(\“)转义的双引号。
  • 其他反斜杠可能会单独出现,但应视为普通字符

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

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

string[] splitArguments = CommandLineToArgs(arguments);

3 个答案:

答案 0 :(得分:1)

这没什么特别棘手的。您可以使用基本的C#语法来检查各个字符是否需要解析。

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

我发布了我在文章A C# Command-Line Parser中解析命令行所做的代码。

答案 1 :(得分:0)

最简单,最强大的解决方案是使用解析器的某些实现,例如,this one或类似Command Line Parser Library的库取决于您在应用程序中究竟需要什么。

答案 2 :(得分:-3)

如果您只是希望像GetCommandLineArgs生成的数组中的参数,可以使用string.Split:

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