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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从C#中的文件路径中删除引号和命令行参数?相关的知识,希望对你有一定的参考价值。

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

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

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

C: My Program Sample Folder SubFolder2 MyApp1.exe

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

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

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

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

答案

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

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

这是一个link to ideone

另一答案

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

另一答案

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

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

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

array[0] = "C:My ProgramSample FolderSubFolder2MyApp1.exe"
array[1] = "-parameter13XY1 -parameter101XZ2"
另一答案

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

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

以上是关于如何从C#中的文件路径中删除引号和命令行参数?的主要内容,如果未能解决你的问题,请参考以下文章

VS2008中命令行参数如何设置读入多个文件

如何从 shell 获取准确的命令行字符串?

linux 命令行 如何切换回到刚才的文件夹?

命令行参数中的 Eclipse 和引号?

如何在命令行启动参数上转义文件路径中的空格

如何在命令行启动参数上转义文件路径中的空格