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

Posted

技术标签:

【中文标题】如何从 C# 中的文件路径中去除引号和命令行参数?【英文标题】:How do I strip quotes and commandline arguments out from a file path in C#? 【发布时间】:2012-08-30 01:05:15 【问题描述】:

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

"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 个。

【问题讨论】:

可以使用replacesplit字符串方法。 你确定你的最后一个例子是有效的吗?我以前从未见过引号内的命令行参数。 【参考方案1】:

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

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

这是link to ideone。

【讨论】:

【参考方案2】:

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

【讨论】:

@feedwall 同意。但是,如果您已经在使用它,例如,这很容易。【参考方案3】:

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

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

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

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

【讨论】:

啊,那将是第一个 " 之前的那个 - 你在元素 1 中查看了吗?【参考方案4】:

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

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

【讨论】:

var 表示编译器会自动推断类型。在这个例子中,它可能是 'string[]' (因为这是 Split 方法返回的内容)但 var 非常好。

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

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

Jenkins Mstest 插件在尝试运行多个测试类别时去除命令行中的双引号

如何在 C# 中使用命令行参数创建应用程序快捷方式(.lnk 文件)

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

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

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