Detecting if a program is installed and where using cmd.exe

batch-file, cmd, powershell, windows

Solution

Take a look at this registry key.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths

In it you will find something similar to this for firefox.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe]
@="C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"
"Path"="C:\\Program Files (x86)\\Mozilla Firefox"

and here is a bit that reads the value from Powershell. Same thing can be done from batch file with reg.exe.

$Firepath = get-item -path 'registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\firefox.exe'
$Firepath.GetValue('')

Problem

Windows has the program start.exe which somehow knows how to open programs by their lay-name like "firefox" Typing `start firefox` into cmd.exe opens firefox assuming its installed. Is there a similar command to start that will return the file path rather than starting the application? Also open to any similar but proper solution UPDATE: Other answers suggest using `where` command, and this works for programs like ping which are in the system directories, but does not find firefox like `start` does.

Original source