相当于 C# 中的"where"命令提示符命令



有没有办法在C#中动态查找路径而不执行"where"命令提示符命令?

例如,如果我想找到mspaint.exe,我可以在命令提示符中键入

where mspaint

并且它返回路径。

我不认为公共语言运行时中有一个内置的方法可以帮你做到这一点,但你当然可以自己做:

  • 获取PATH环境变量的值
  • ;分隔符上拆分以获得路径中的目录列表
  • 检查这些目录中的每一个,看看它是否包含program

示例:

public static string FindInPath(string filename)
{
var path = Environment.GetEnvironmentVariable("PATH");
var directories = path.Split(';');
foreach (var dir in directories)
{
var fullpath = Path.Combine(dir, filename);
if (File.Exists(fullpath)) return fullpath;
}
// filename does not exist in path
return null;
}

不要忘记将.exe添加到文件名中。(或者,您可以修改上面的代码来搜索任何可执行的扩展:.bat.com.exe;甚至可能是任何扩展。)

这是基于@TypeIA的答案,但它支持当前目录和所有PATHEXT

public static string Where(string file)
{
var paths = Environment.GetEnvironmentVariable("PATH").Split(';');
var extensions = Environment.GetEnvironmentVariable("PATHEXT").Split(';');
return (from p in new[] { Environment.CurrentDirectory }.Concat(paths)
from e in new[] { string.Empty }.Concat(extensions)
let path = Path.Combine(p.Trim(), file + e.ToLower())
where File.Exists(path)
select path).FirstOrDefault();
}

最新更新