我正在阅读使用 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/