是否有任何.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是空的。
答案 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
-k Something -i -user Bob
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));