我正在使用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);
答案 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(' ');