C#中“where”命令提示符命令的等效

时间:2014-03-05 22:27:40

标签: c# windows command-prompt

有没有办法在不执行“where”命令提示符命令的情况下动态查找C#中的路径?

例如,如果我想找到mspaint exe,我可以在命令提示符下输入

where mspaint

然后返回路径。

2 个答案:

答案 0 :(得分:5)

我不认为Common Language Runtime中有一个内置方法可以为你做这个,但你当然可以自己做:

  • 获取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;或者甚至可能是任何扩展程序。)

答案 1 :(得分:0)

这是基于@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();
}