3

我有引号中的文件路径,带有空格的文件夹名称,如下所示,至少附加了两个不同长度和值的命令行参数:

“C:\我的程序\示例文件夹\SubFolder2\MyApp1.exe”-parameter13XY1 -parameter101XZ2

我只想有不带引号且不带命令行参数的文件名:

C:\我的程序\示例文件夹\SubFolder2\MyApp1.exe

我会在框架中搜索像“ StripQuotes ”和“ StripCommandLineArgs ”这样的函数,但我没有找到任何类似的东西,因为框架几乎所有东西都缺少所需的东西。至于引号它可能会做一个“替换”,但命令行参数不能这样排序。文件名还包含空格,因此无法使用 Split(),因为它会删除文件名的一部分。

最后,我只想拥有不带引号和命令行参数的文件名。请注意,文件名还可以包含空格和连字符以及它们的两种组合,如下所示:

“C:\My Program - Win64\Sample-Folder\Sub -Folder3\My App55-.exe -parameter1 -parameter2 para3”

在这种情况下,我不知道如何仅找出有效路径。还可能附加五个命令行参数,甚至 10 个。

4

4 回答 4

2

您可以使用正则表达式"^\"([^\"]*)\".*$"来获取引用字符串的内容,如下所示:

var s = "\"C:\\My Program\\Sample Folder\\SubFolder2\\MyApp1.exe\" -parameter13XY1 -parameter101XZ2";
var res = Regex.Replace(s, "^\"([^\"]*)\".*$", "$1");
Console.WriteLine(res);

这是ideone 的链接

于 2012-09-05T10:33:39.273 回答
1

一个稍微重一点的答案是使用像http://commandline.codeplex.com/这样的命令行解析库。它为您处理所有解析,而无需处理正则表达式。

于 2012-09-05T10:31:11.167 回答
0

String.Split可以为要拆分的字符提供一个参数 - 所以如果你试试这个:

var array = filename.Split('"');

你应该得到一个包含两个元素的数组:

array[0] = "C:\My Program\Sample Folder\SubFolder2\MyApp1.exe"
array[1] = "-parameter13XY1 -parameter101XZ2"
于 2012-09-05T10:27:48.467 回答
0

非常粗略和快速的解决方案:

string cmd = "\"C:\\My Program\\Sample Folder\\SubFolder2\\MyApp1.exe\" -parameter13XY1 -parameter101XZ2";
var allStrings = cmd.Split(new char[] {'"'} );
于 2012-09-05T10:29:36.777 回答