WHERE
est génial, mais lent. J'ai trouvé que l'interrogation du registre était plus rapide, mais moins fiable, alors j'ai combiné les deux idées dans une fonction comme celle-ci :
app_path_func.cmd :
@ECHO OFF
CLS
FOR /F "skip=2 tokens=1,2* USEBACKQ" %%N IN (`reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\%~1" /t REG_SZ /v "Path"`) DO (
IF /I "%%N" == "Path" (
SET wherepath=%%P%~1
GoTo Found
)
)
FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe %~1`) DO (
SET wherepath=%%F
GoTo Found
)
FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe /R "%PROGRAMFILES%" %~1`) DO (
SET wherepath=%%F
GoTo Found
)
FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe /R "%PROGRAMFILES(x86)%" %~1`) DO (
SET wherepath=%%F
GoTo Found
)
FOR /F "tokens=* USEBACKQ" %%F IN (`where.exe /R "%WINDIR%" %~1`) DO (
SET wherepath=%%F
GoTo Found
)
:Found
SET %2=%wherepath%
:End
Test :
@ECHO OFF
CLS
CALL "app_path_func.cmd" WINWORD.EXE PROGPATH
ECHO %PROGPATH%
PAUSE
Résultat :
C:\Program Files (x86)\Microsoft Office\Office15\WINWORD.EXE
Press any key to continue . . .
https://www.freesoftwareservers.com/display/FREES/Find+Exécutable+via+Batch+-+Microsoft+Office+Exemple+-+WINWORD+-+Find+Microsoft+Office+Path
2 votes
Diverses réponses sur Existe-t-il un équivalent de "which" sous Windows ? - Débordement de pile
0 votes
Si l'application est en cours d'exécution et que vous avez besoin de connaître son emplacement, utilisez Process Explorer (de Sys Internals).
7 votes
where
a fonctionné pour moi sur Windows 7 Enterprise