从带参数的命令获取FileName

时间:2016-04-12 14:56:29

标签: c# command-prompt

是否有任何.Net方法可以从Windows命令字符串中提取路径和文件名而不包含参数?

var p = @"c:\somefolder\someConsoleApp.exe -k Something -i -user Bob"

每次对象都有命令时,我尝试使用FileInfo,Path.GetFileName和其他人。

例如,

var fileName = System.IO.Path.GetFileName(p);
Console.WriteLine(fileName);

输出

someConsoleApp.exe -k Something -i -user Bob

我想得到" someConsoleApp.exe"最好有权访问。

ProcessStartInfo可能能够以某种方式执行它,但它有同样的问题,FileName有整个事情,Arguments是空的。

4 个答案:

答案 0 :(得分:1)

您可以使用Regex表达式处理任何文件名(带空格和句点)

string input = @"c:\somefolder\someConsoleApp.exe -k Something -i -user Bob";
var name = System.IO.Path.GetFileName(input);
var match = Regex.Match(name, @"([A-Za-z0-9\-+=\s\.!%&$@{}\[\]'_])+\.([A-Za-z0-9\-+=!%&$@{}\[\]'_])+\s", RegexOptions.IgnoreCase);
var shortname = match.Value;
if (shortname == "")
    shortname = name;
else
    shortname = shortname.Substring(0, shortname.Length - 1);

即使你给出了字符串

c:\ somefolder \ some Console.App.bat -k Something -i -user Bob anotherApp.exe

结果将是

某些Console.App.bat

答案 1 :(得分:0)

假设您一直在寻找var p = @"c:\somefolder\someConsoleApp.exe -k Something -i -user Bob"; var list = p.Split(new [] {".exe"}, StringSplitOptions.None); var program = list.First() + ".exe"; var param = list.LastOrDefault(); 个文件,您可以使用此文件:

c:\somefolder\someConsoleApp.exe
  • program => -k Something -i -user Bob
  • param => morphTo

答案 2 :(得分:0)

对于像这样的Windows命令字符串:

var p = @"c:\somefolder\someConsoleApp.exe -k Something -i -user Bob";

你可以得到真正的扩展:

var extension = Path.GetExtension(p).Split().First();

然后将扩展名替换为真实的扩展名:

var path = Path.ChangeExtension(p, extension);

最后得到论点:

var query = p.Replace(path, string.Empty);

<强>输出

extension =  .exe
path      =  c:\somefolder\someConsoleApp.exe
query     =  -k Something -i -user Bob

答案 3 :(得分:-1)

使用以下代码执行此操作

        string p = @"c:\somefolder\some Console App.exe -k Something -i -user Bob";
        string s = p.Substring(0, p.IndexOf(".exe") + 4);
        Console.WriteLine(p.Substring(0, p.IndexOf(".exe")+4));
        Console.WriteLine(Path.GetFileName( s));