c# - 我如何像 Environment.GetCommandLineArgs() 那样解析命令行参数?

标签 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"

我在考虑正则表达式,但这超出了我的范围。

[edit] 我更喜欢正则表达式,但我会查看提到的代码和类。

规则似乎是:

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

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

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

string[] splitArguments = CommandLineToArgs(arguments);

最佳答案

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

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

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

关于c# - 我如何像 Environment.GetCommandLineArgs() 那样解析命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14961045/

相关文章:

python - 尝试使用正则表达式捕获特定模式 (Python 3.4)

regex - Mac OS X 上的 grep/ack 查找多个字符串并尊重文件类型

C# 后期绑定(bind)到 com/activeX 服务器,一种方法有问题

c# - 计算重叠日期的住宿天数

c# - System.Web.Hosting.HostingEnvironment.Cache 是否等于 HttpContext.Current.Cache?

regex - 如何使用 RegEx 选择日期范围

c# - 当我将我的用户控件拖到设计 View 上时,Visual Studio 引发错误

c# - 是否有或将会有专门为托管代码设计的硬件?

c# - 面板中的按钮不调用父 Onclick 事件

c# - 从下拉列表中选择项目时更改 ComboBox 的文本字段?