Windows'ta bir yürütülebilir dosyanın konumunu nasıl bulabilirim?


154

whereKonsolda bunun gibi çalıştırılabilir programların konumlarını bulmak için bir araç kullandığımı hatırladım :

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

Şimdi bu aracı bulamıyorum. Windows'un bu aramayı yapmak için yerleşik bir aracı olup olmadığından emin değil misiniz?



Uygulama çalışıyorsa ve konumunu bilmeniz gerekiyorsa, İşlem Gezgini'ni (Sys Internals'dan) kullanın.
Ganesh R.

6
wherebenim için çalıştı Windows 7 Enterprise
Bohemian

4
SAYFA OP: Lütfen kabul edilen cevabı güncelle :)
Jake

1
@ David.Chu.ca lütfen kabul edilen cevabı güncelle
Matt Frear

Yanıtlar:


351

StackOverflow cevabına göre pencerelerde 'hangisi' eşdeğeri var mı? , where.exebunu Windows 7 ve Windows Server 2003 ve sonrasında yapar:

Örnek

C:\> where ping

Çıktı:

C:\Windows\System32\PING.EXE

19
Bu ekstra yazılım yüklemeden çalıştığı için doğru cevap olarak makred edilmelidir
Çerez

25
Bu cevabın önemli bir kısmı, powershell'de, wherebunun için varsayılan bir takma addır, Where-Objectbu yüzden bunun yerine kullanmanız gerekir where.exe, veya gcm/Get-Command
Dave Andersen

2
Powershell'den ne haber. Powershell'de aynı şeyi nasıl başarabilirim?
14'de

1
@ krv @DaveAndersen'ın belirttiği gibi, powershell'de bazı yollarla birlikte size tam yol verecek olan Get-Command ping(veya sadece gcm ping) yazabilirsiniz .
Sam

22

EDIT: Eklemeliydim, komut isteminde WHERE komutunu kullanamıyorsanız, PATH değişkeninizi kontrol edin. (Sadece "path" komutunu kullanın.) C: \ Windows \ System32 yolunda olduğundan emin olun. Burası "where.exe" nin bulunduğu yer.

NEREDE, aradığınız komut! NEREDE yerleşik "hangi" ve "locate" komutunun içerdiği UNIX kabuğu arasında bir komut gibidir, bu komut hem çalıştırılabilir dosyalar hem de normal dosyalar için çalışır.

Aynı zamanda, her ikisinden de biraz daha karmaşık olsa da, genel olarak basit.

WHERE <file>

çalışacak.

Tüm dosya sistemine bakmadığı için "locate" komutundan farklıdır. Bunun yerine, varsayılan davranış iki konumda dosya aramaktır:

  • Geçerli dizin
  • PATH değişkenindeki tüm dizinler.

Bu nedenle, dizini belirtmeden doğrudan bir komut isteminden çalıştırabileceğiniz herhangi bir komut, NEREDE komutu tarafından bulunur. (Bunun gibi herhangi bir komut PATH değişken listesinde zaten var.)

Yalnızca komut yolu değişkeninde arama yapmak istiyorsanız , şunları kullanabilirsiniz:

WHERE "$path:<search text>"

Öte yandan, bir dosyanın tüm kopyalarını bir dizin ağacında bulmak istiyorsanız, şunları kullanabilirsiniz:

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

Son olarak, WHERE, uzantı dahil etmeden PATHEXT değişkeninden bir uzantıya sahip komutları ve dosyaları bulur. Diğer tüm dosyalar tam olarak veya joker karakterlerle belirtilmelidir.

Örneğin "dxdiag.exe" ve "dxdiagn.dll" dosyalarını alın. Aşağıdaki komutu ve çıktısını not alın:

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

"Dxdiag.exe" nin tüm sürümlerini döndürmekte başarılı olur çünkü ".exe" PATHEXT değişkenindeki uzantılardan biridir. (Not: "NERED dxdiag" de işe yarayabilirdi, çünkü C: \ Windows \ System32 PATH değişkeninde.)

WHERE /R C:\Windows dxdiagn

Öte yandan, ".dll" PATHEXT içinde olmadığı için herhangi bir sonuç döndürmüyor.

Bu durumda, bir joker karakter eklemenin bize sağladığı sonuçlara bakın:

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

Dxdiagn.dll dosyasının tüm sürümlerini başarıyla döndürür .

Daha fazla bilgi için "NEREDE /?" Kullanın. Bu yardımcı olur umarım!


2
where where C:\Windows\System32\where.exe:)
vp_arth

1
@vp_arth Sadece aynı şeyi düşünüyordum :)
Reversed Engineer

10

kullanım dir:

cd \
dir /s /b mytool.exe

cd \bölüm hiyerarşisinin en üstünde arama başlar sağlamak için, sürücünün köküne sizi değiştirir.


Windows Search'te bir komut satırı yapmak gibi görünüyor.
Ganesh R.

5
Bu sürücünün özyinelemeli bir arama yapar ve sonsuza dek sürecektir.
djhowell

6
Yürütülebilir bulmanın tek yolu DEĞİLDİR çevresel değişken YOL bu yapmaktır. Asla yolunu belirtmedi, çalıştırılabilir olduğunu söyledi .
John T

yürütülebilir dosyayı bulur, ancak biraz zaman alır.
Michael Z

Eğer ada bir kısmının yürütülebilir veya en azından adını biliyorsanız tabii bu sadece çalışır
Oliver Williams'ı

9

PowerShell için bazı şeylerin biraz farklı olabileceğini unutmayın:

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

Teşekkürler, bu hem cmd hem de PowerShell için çalışıyor
Ding-Yi Chen

3

Bu basit bir komut olarak yerleşik olmadığını sinir bozucu.

Ancak, biri toplu iş dosyası olan birkaç çözüm vardır .

Aşağıdaki gibi bir toplu iş dosyası (hangi.bat) oluşturun:

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

Bu, yerel dizine bakar, bir uzantı olan veya olmayan bir dosya adı parametresi alır ve ilk eşleşmeyi geçerli dizinden veya PATH içinde döndürür.

Sonra which cmd.exeyazarsanız, yürütecek cmd.exe dosyasını bulmak gibi çalıştırın cmd.


3

Windows'ta ücretsiz yardımcı programı kullanabilirsiniz Her şeyi arama motoru tam veya kısmi bir adla herhangi bir dosyayı anında aramak için (sabit diskiniz ntfs biçiminde ise).


1
Bu ve pencereler arasında gece ve gündüz farkı var.
AnthonyVO


1

PowerShell'de

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

Bunu kolayca bir Cmdlet'e dönüştürebilirsiniz.

Bir düzenlemede önerildiği gibi, bunu başarmanın başka bir yolu:

get-command notepad.exe | select Source

0

Başlatmak için yalnızca yola ihtiyacınız varsa, start komutunu kullanmak genellikle daha iyidir. Örneğin, nerede yüklü olursa olsun Chrom {e | ium} uygulamasını başlatmak için "start chrome.exe" kullanabilirsiniz.


0

Heh, sadece bu Windows'un bir liner toplu dosyasını göndermek zorundayım:

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

Bir test:

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

Varsayılan olarak etkin olan uzantılara sahip olmayan kullanıcılar için gerekli olan setlocal enableextensionsve endlocaliçine kodu alırsanız tam bir astar değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.