147

In Linux, we have the "which" command to find out the path of an executable.
What is its Windows equivalent? Is there any PowerShell command for doing that?

2

6 Answers 6

147

Newer versions of Windows (I think Windows 2003 and up) have the where command:

C:\>where ping
C:\Windows\System32\PING.EXE

And for PowerShell, explicitly add the .exe suffix:

PS C:\>where.exe ping
C:\Windows\System32\PING.EXE
8
  • 6
    where work for me in Windows 7
    – Nam G VU
    Oct 10, 2011 at 16:30
  • 10
    This only works in cmd, not in PowerShell (in my experience)
    – Thomas
    Oct 13, 2014 at 15:15
  • where /r c:\ fileName adding the /r c:\ allowed me to perform a recursive search starting at the root of the C drive using Windows 7 Professional it seems to not be in access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…
    – CrandellWS
    Sep 25, 2015 at 9:09
  • 12
    in Powershell you should say where.exe ping because where is by default aliased to Where-Object cmdlet which is completely different story
    – maoizm
    May 27, 2018 at 11:18
  • 2
    where.exe explicitly rather than where works for me in PowerShell
    – drkvogel
    Sep 26, 2019 at 15:35
62

Yes, Get-Command will find all commands including executables:

PS\> Get-Command ipconfig

If you want to limit the commands to just executables:

PS\> Get-Command -CommandType Application

Will find all exes in your path. There is an alias for interactive use:

PS\> gcm net* -CommandType Application

To get the path of an executable, you can use the Path property of the returned object. For example:

PS\> (Get-Command notepad.exe).Path

For more info, run man Get-Command -full.

10

where.exe explicitly rather than where works for me in PowerShell:

PS C:\Users\birdc> where ping
PS C:\Users\birdc> where.exe ping
C:\Windows\System32\PING.EXE
3
  • Works on Windows 10 1903. Sep 26, 2019 at 15:41
  • In PowerShell? I'm on Windows 10 Pro 1903, and where ping gives me nothing in PowerShell.
    – drkvogel
    Sep 26, 2019 at 15:53
  • Sorry I was unclear. I meant where.exe. Sep 26, 2019 at 16:21
4

Cmd

where

C:\Users\X>where ping
C:\Windows\System32\PING.EXE

C:\Users\X>

Powershell

Get-Command

PS C:\Users\X> Get-Command ping
CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Application     PING.EXE                                           10.0.1776… C:\WINDOWS\system32\PING.EXE

PS C:\Users\X>
3

In addition to user10404, the help command will work on aliases, so you can use the same command name (gcm) for help and interactive use:

help gcm -Parameter *
# or
man gcm -Par *
3

If you want to make it short, create a one line which.cmd file with the content

echo %~$PATH:1

This will search the first parameter (%1) fed to the script and display the full path of found file. Good place to put this script in windows 10 is %LOCALAPPDATA%\Microsoft\WindowsApps\which.cmd

And you get your which command in path.

c:\>which cmd.exe

c:\>echo C:\Windows\System32\cmd.exe
C:\Windows\System32\cmd.exe

You must log in to answer this question.