2009-09-30 17:06:38 +0000 2009-09-30 17:06:38 +0000
174
174

Hoe vind ik de locatie van een uitvoerbaar programma in Windows?

Ik herinnerde me dat ik een tool genaamd where gebruikte om locaties te vinden voor uitvoerbare programma’s als deze in een console:

C:\Tmp\Where myTool.exe
 C:\Program Files\MyApp\myTools.exe
 ....

Nu kan ik deze tool niet vinden. Weet je niet zeker of Windows een ingebouwde tool heeft om dat te doen?

Ответы (12)

380
380
380
2012-06-24 11:41:10 +0000

Volgens het StackOverflow antwoord op Is er een equivalent van ‘welke’ op windows? , where.exe doet dit op Windows 7 en Windows Server 2003 en later:

Voorbeeld

C:\> where ping

Uitgang:

C:\Windows\System32\PING.EXE

In powershell gebruik where.exe, Get-Command (of de afkorting gcm), aangezien where de standaard alias voor Where-Object is.

23
23
23
2012-09-27 01:23:30 +0000

EDIT: Ik had moeten toevoegen, als je het commando WHERE van de commandoprompt niet kunt gebruiken, controleer dan je PATH-variabele. Gebruik gewoon het “pad” commando. Zorg ervoor dat C:Windows System32 op je pad staat. Dat is waar “where.exe” zich bevindt.

WHERE is het commando dat je zoekt! WERE is als een kruising tussen de ingebouwde UNIX-shell “welke” en het “lokaliseren” commando, in die zin dat het werkt voor zowel commando executables als gewone bestanden.

Het is ook iets complexer dan beide, hoewel, in het algemeen, een eenvoudige

WHERE <file>

zal werken.

Het is anders dan het “lokaliseren” commando in die zin dat het niet door het hele bestandssysteem kijkt. In plaats daarvan is het standaard gedrag om te zoeken naar bestanden op twee locaties:

  • De huidige directory.
  • Alle directories in de PATH-variabele.

Dus, elk commando dat je direct vanaf een commandoprompt kunt uitvoeren zonder de directory te specificeren, zal worden gevonden door het WHERE-commando. (Omdat zo'n commando al in de PATH-variabelenlijst staat.)

Als je alleen in de opdrachtpadvariabele wilt zoeken, kun je:

WHERE "$path:<search text>"

gebruiken Als je daarentegen alle kopieën van een bestand in een mappenstructuur wilt vinden, kun je:

WHERE /R <Top Level Directory> <search text>

gebruiken. Alle andere bestanden moeten precies of met jokertekens worden opgegeven.

Neem bijvoorbeeld de bestanden “dxdiag.exe” en “dxdiagn.dll”. Let op het volgende commando en de uitvoer ervan:

WHERE /R C:\Windows dxdiag

C:\Windows\System32\dxdiag.exe
C:\Windows\SysWOW64\dxdiag.exe
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiag.exe
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiag.exe

Het lukt om alle versies van “dxdiag.exe” terug te geven omdat “.exe” een van de extensies is in de PATHEXT-variabele. (Opmerking: “WERE dxdiag” zou ook hebben gewerkt, omdat C:\Windows\System32 in de PATH-variabele staat.) WHERE /R C:\Windows dxdiagn

daarentegen, slaagt er niet in een resultaat terug te geven, omdat “.dll” niet in PATHEXT staat.

In dit geval, kijk naar het resultaat dat het toevoegen van een wildcard ons geeft:

WHERE /R C:\Windows dxdiagn*

C:\Windows\System32\dxdiagn.dll
C:\Windows\System32\en-US\dxdiagn.dll.mui
C:\Windows\SysWOW64\dxdiagn.dll
C:\Windows\SysWOW64\en-US\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_daccd04369b09c70\dxdiagn.dll.mui
C:\Windows\WinSxS\amd64_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_7c8d3f96e7882ec7\dxdiagn.dll
C:\Windows\WinSxS\x86_microsoft-windows-d..iagnostic.resources_31bf3856ad364e35_6.2.9200.16384_en-us_7eae34bfb1532b3a\dxdiagn.dll.mui
C:\Windows\WinSxS\x86_microsoft-windows-d..x-directxdiagnostic_31bf3856ad364e35_6.2.9200.16384_none_206ea4132f2abd91\dxdiagn.dll

Het geeft met succes alle versies van dxdiagn.dll.

voor meer informatie, gebruik “WHERE /?”. Ik hoop dat dit helpt!

10
10
10
2009-09-30 17:15:31 +0000

gebruik dir:

cd \
dir /s /b mytool.exe

het cd gebruikdir`:

cd \
dir /s /b mytool.exe

het onderdeel verandert u in de wortel van de schijf, om ervoor te zorgen dat het zoeken bovenaan de hiërarchie begint.

9
9
9
2014-04-07 12:52:13 +0000

Merk op dat sommige dingen misschien een beetje anders zijn voor PowerShell:

PS C:\Users\Rob.wb-devel> where ping

PS C:\Users\Rob.wb-devel> where git

PS C:\Users\Rob.wb-devel> whereis.bat git
C:\Program Files (x86)\Git\cmd\git.exe

PS C:\Users\Rob.wb-devel> where.exe git
C:\Program Files (x86)\Git\cmd\git.exe
3
3
3
2009-09-30 19:26:11 +0000

In Windows kunt u het gratis hulpprogramma Alles zoekmachine gebruiken om instantly te zoeken naar een bestand op volledige of gedeeltelijke naam (als uw harde schijf is geformatteerd in ntfs).

3
3
3
2009-09-30 18:23:36 +0000

Frustreren dat het niet als een eenvoudig commando is ingebouwd.

Er zijn echter verschillende oplossingen, waarvan één een batch-bestand is.

Maak een batch-bestand aan (dat. bat) als volgt:

@setlocal
@set P2=.;%PATH%
@for %%e in (%PATHEXT%) do @for %%i in (%~n1%%e) do @if NOT "%%~$P2:i"=="" echo %%~$P2:i

Dit ziet er uit in de lokale directory, neemt een bestandsnaamparameter met of zonder extensie, en geeft de eerste match terug van de huidige directory of in het PATH.

Voer het dan uit als which cmd.exe om de cmd.exe te vinden die wordt uitgevoerd als je cmd intypt.

1
1
1
2015-09-21 17:59:01 +0000

In PowerShell

(@($env:path.split(";")) + (pwd).Path) | where { dir $_ -ErrorAction SilentlyContinue |? Name -eq foo.exe }

kunt u dit eenvoudig omzetten in een Cmdlet.

Een andere manier om dit te bereiken, zoals gesuggereerd in een bewerking:

get-command notepad.exe | select Source
1
1
1
2009-09-30 17:19:01 +0000

Als u alleen welke wilt, heeft het project GnuWin32 een aantal unix-tools met individuele installateurs.

0
0
0
2020-01-19 15:42:25 +0000

Wat voor mij werkte was

Get-Command chromedriver

die zoiets als

CommandType Name Version Source
----------- ---- ------- ------
Application chromedriver.exe 0.0.0.0 C:\WINDOWS\chromedriver.exe

retourneert. Vervang chromedriver gewoon door het programma dat u zoekt.

0
0
0
2019-10-08 11:40:42 +0000

Heh, ik hoef alleen maar dit Windows’ one-liner batch bestand te plaatsen:

C:>type wh.cmd
@for %%f in (%*) do for %%e in (%PATHEXT% .dll .lnk) do for %%b in (%%f%%e) do for %%d in (%PATH%) do if exist %%d\%%b echo %%d\%%b

Een test:

C:>wh ssh
C:\cygwin64\bin\ssh.EXE
C:\Windows\System32\OpenSSH\ssh.EXE

Niet helemaal een one-liner als je de code in setlocal enableextensions en endlocal verpakt, die nodig zijn voor gebruikers die de extensies niet standaard aan hebben staan.

0
0
0
2019-12-04 17:04:50 +0000

Als je Powershell gebruikt, is where iets totaal anders dan cmd’s waar.

In powershell, type:

(Get-Command -powershell.exe).Path
0
0
0
2013-04-24 16:35:10 +0000

Als je alleen het pad nodig hebt om het te lanceren, is het vaak beter om het start commando te gebruiken. U kunt bijvoorbeeld “start chrome.exe” gebruiken om Chrom{e|ium} te starten, ongeacht waar het is geïnstalleerd.