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?

6 Answers6

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
Randy Levy
  • 1,589
  • 6
    where work for me in Windows 7 – Nam G VU Oct 10 '11 at 16:30
  • 10
    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
  • NGL, I like this name better than which. PS: This worked for me in Windows 10 cmd.exe. I typed where.exe wsl – Daniel Kaplan Jan 25 '24 at 06:17
  • That is not the equivalent of which command. that is the equivalent of whereis command in linux. so it wont tell you which command is the executable. it just shows you all matching executables of that name in the path. – Peter Moore Mar 11 '24 at 15:48
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.

dangph
  • 4,833
user10404
  • 881
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
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>
Joma
  • 141
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
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