如何从C#中的文件路径中删除引号和命令行参数?

时间:2012-09-05 10:20:46

标签: c# command-line filenames quotes strip

我的引号中的文件路径带有空格的像这样的foldernames,至少有两个不同长度和值的命令行参数:

“C:\ My Program \ Sample Folder \ SubFolder2 \ MyApp1.exe”-parameter13XY1 -parameter101XZ2

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

C:\ My Program \ Sample Folder \ SubFolder2 \ MyApp1.exe

我会在框架中搜索“ StripQuotes ”和“ StripCommandLineArgs ”等功能,但我没有找到类似的东西,因为框架几乎所有内容都缺少什么需要。 至于引号,它可能会执行“替换”,但命令行参数不能以这种方式进行排序。文件名也包含空格,因此无法使用Split(),因为它会删除文件名的一部分。

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

“C:\我的程序 - Win64 \ Sample-Folder \ Sub -Folder3 \ My App55- .exe -parameter1 -parameter2 para3”

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

4 个答案:

答案 0 :(得分:2)

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

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

这是link to ideone

答案 1 :(得分:1)

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

答案 2 :(得分:0)

String.Split可以为角色分割一个参数 - 所以如果你试试这个:

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

您应该返回一个包含两个元素的数组:

array[0] = "C:\My Program\Sample Folder\SubFolder2\MyApp1.exe"
array[1] = "-parameter13XY1 -parameter101XZ2"

答案 3 :(得分:0)

非常粗糙&快速解决方案:

string cmd = "\"C:\\My Program\\Sample Folder\\SubFolder2\\MyApp1.exe\" -parameter13XY1 -parameter101XZ2";
var allStrings = cmd.Split(new char[] {'"'} );