144

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?

  • See also http://stackoverflow.com/questions/304319/is-there-an-equivalent-of-which-on-the-windows-command-line – ysap May 08 '15 at 10:17
  • [Is there an equivalent of 'which' on the Windows command line?](http://stackoverflow.com/q/304319/995714) – phuclv May 04 '16 at 04:21

6 Answers6

144

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
Randy Levy
  • 1,559
  • 1
  • 10
  • 10
  • 6
    `where` work for me in Windows 7 – Nam G VU Oct 10 '11 at 16:30
  • 9
    This only works in cmd, not in PowerShell (in my experience) – Thomas Oct 13 '14 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 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Step_by_Step_Guide/ap-doslinux.html – CrandellWS Sep 25 '15 at 09: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 '18 at 11:18
  • 2
    `where.exe` explicitly rather than `where` works for me in PowerShell – drkvogel Sep 26 '19 at 15:35
  • Does not work in Windows 10 cmd.exe – Chris Dodd Jun 07 '22 at 19:26
61

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.

dangph
  • 4,603
  • 4
  • 25
  • 31
user10404
  • 851
  • 5
  • 4
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
drkvogel
  • 427
  • 5
  • 9
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
Manu
  • 31
  • 1
3

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>
Joma
  • 131
  • 3
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 *
yzorg
  • 745
  • 2
  • 6
  • 20