Search code examples
c#windowscommand-prompt

Equivalent of "where" command prompt command in C#


Is there any way to find a path in C# dynamically without executing "where" command prompt command?

For example, if I want to find mspaint exe, I can type this in command prompt

where mspaint

and it returns the path.


Solution

  • I don't think there is a built-in method in the Common Language Runtime to do this for you, but you can certainly do it yourself:

    • Get the value of the PATH environment variable
    • Split it on ; delimiters to get a list of directories in the path
    • Check each of those directories to see if it contains program

    Example:

    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;
    }
    

    Don't forget to add .exe to the filename. (Or, you could modify the code above to search for any executable extension: .bat, .com, .exe; or perhaps even any extension at all.)