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

Acc*_*ate 5 c# windows command-prompt

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

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

where mspaint
Run Code Online (Sandbox Code Playgroud)

它返回路径.

Typ*_*eIA 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;
}
Run Code Online (Sandbox Code Playgroud)

不要忘记添加.exe文件名.(或者,你可以修改上面的代码,搜索任何可执行文件扩展名:.bat,.com,.exe,或者甚至在所有的任何扩展).