Alors que les versions ultérieures de Windows ont un where
vous pouvez également le faire avec Windows XP en utilisant les modificateurs de variables d'environnement, comme suit :
c:\> for %i in (cmd.exe) do @echo. %~$PATH:i
C:\WINDOWS\system32\cmd.exe
c:\> for %i in (python.exe) do @echo. %~$PATH:i
C:\Python25\python.exe
Vous n'avez pas besoin d'outils supplémentaires et il n'est pas limité à PATH
puisque vous pouvez substituer n'importe quelle variable d'environnement (au format chemin d'accès, bien sûr) que vous souhaitez utiliser.
Et, si vous en voulez un qui peut gérer toutes les extensions dans PATHEXT (comme le fait Windows lui-même), celui-ci fait l'affaire :
@echo off
setlocal enableextensions enabledelayedexpansion
:: Needs an argument.
if "x%1"=="x" (
echo Usage: which ^<progName^>
goto :end
)
:: First try the unadorned filenmame.
set fullspec=
call :find_it %1
:: Then try all adorned filenames in order.
set mypathext=!pathext!
:loop1
:: Stop if found or out of extensions.
if "x!mypathext!"=="x" goto :loop1end
:: Get the next extension and try it.
for /f "delims=;" %%j in ("!mypathext!") do set myext=%%j
call :find_it %1!myext!
:: Remove the extension (not overly efficient but it works).
:loop2
if not "x!myext!"=="x" (
set myext=!myext:~1!
set mypathext=!mypathext:~1!
goto :loop2
)
if not "x!mypathext!"=="x" set mypathext=!mypathext:~1!
goto :loop1
:loop1end
:end
endlocal
goto :eof
:: Function to find and print a file in the path.
:find_it
for %%i in (%1) do set fullspec=%%~$PATH:i
if not "x!fullspec!"=="x" @echo. !fullspec!
goto :eof
Il renvoie en fait toutes les possibilités, mais vous pouvez le modifier assez facilement pour des règles de recherche spécifiques.
0 votes
Que fait "which" sous Unix ?
3 votes
Foredecker : "which" recherche dans le PATH l'exécutable qui sera lancé si vous tapez une commande à l'invite du shell.
3 votes
Par exemple, si vous avez 5 versions de Java installées et que vous ne savez pas laquelle est utilisée, vous pouvez taper "which java" et cela vous donnera le PATH du binaire.
11 votes
@Foredecker, MR dit que c'est "où" dans Win2k3 mais Win2k3 ne faisait pas partie de la question. Si "où" n'est pas dans les autres versions de Windows, d'autres réponses sont également valables. IMNSHO, la réponse qui fonctionne sur toutes les versions de Windows est la meilleure. En outre, les autres réponses ne sont pas fausses, mais constituent simplement des façons différentes de procéder.
43 votes
Je sais que cette question s'est posée avant SuperUser, mais elle a probablement sa place ici.
0 votes
Vous pouvez obtenir un fichier batch ne contenant que 90 octets à partir d'ici : blogs.msdn.com/b/oldnewthing/archive/2005/01/20/357225.aspx Ou exécuter un programme C# - un lien est placé sur le site web ci-dessus.
0 votes
J'ai trouvé ce fichier batch très pratique pankaj-k.net/weblog/2004/11/équivalent_de_qui_dans_les_windows.html
0 votes
Cette question a été posée dans d'autres fils de discussion : [Equivalent de la commande 'which' de *Nix dans Powershell ?][1] [Equivalent de Powershell à unix
which
commande ?] [2] [1] : stackoverflow.com/questions/63805/ [2] : superuser.com/questions/34492/25 votes
Il n'y a pas
which
dans le système Unix standard. L'utilitaire POSIX esttype
. Le shell C possède une commande which, et certains systèmes la possèdent en tant qu'exécutable externe. Par exemple, sur Debian Linux,which
provient d'un paquet appelédebutils
. Cet extérieurwhich
ne "voit" pas les fonctions, alias ou modules intégrés du shell.type
fait ; Bash'stype
a une option pour supprimer cela et faire juste une recherche de chemin.0 votes
Pour illustrer le point de @kaz, comparez les résultats de
which -a pwd
contretype -a pwd