我的引号中的文件路径带有空格的像这样的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个。
答案 0 :(得分:2)
您可以使用正则表达式"^\"([^\"]*)\".*$"
来获取带引号的字符串的内容,如下所示:
var s = "\"C:\\My Program\\Sample Folder\\SubFolder2\\MyApp1.exe\" -parameter13XY1 -parameter101XZ2";
var res = Regex.Replace(s, "^\"([^\"]*)\".*$", "$1");
Console.WriteLine(res);
答案 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[] {'"'} );