我正在阅读使用 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"
我在想正则表达式,但这超出了我的范围。
[编辑] 我更喜欢正则表达式,但我会看看提到的代码和类。
规则似乎是:
- 按空格分割,
- 除非空格在双引号 (") 内。
- 双引号内的字符串可能包含用反斜杠 (\") 转义的双引号。
- 其他反斜杠可能会单独出现,但应视为普通字符
前两个代码部分中的参数和数组将是适当的测试。
[编辑] https://stackoverflow.com/a/749653/350188已经回答了我的问题。它调用本机系统函数并给我与 GetCommandLineArgs() 完全相同的结果:
string[] splitArguments = CommandLineToArgs(arguments);