Windows'ta komut satırından çalıştırılacak programın yolunu bulma


128

Sistemdeki X.EXEklasörde yüklü bir programım olduğunu varsayalım c:\abcd\happy\. Klasör, sistem yolundadır. Şimdi, sistemde X.EXE olarak adlandırılan ancak klasöre yüklenmiş başka bir program olduğunu varsayalım c:\windows\.

Komut satırından X.EXE, ikisinden hangisinin X.EXEbaşlatılacağını yazarsam çabucak öğrenebilir miyim ? (ancak Görev Yöneticisi'nde arama yönlendirmek veya işlem ayrıntılarına bakmak zorunda kalmadan).

Belki bir tür yerleşik komut veya bunun gibi bir şey yapabilen bir program var mı? :

detect_program_path X.EXE

Yanıtlar:


239

whereKomutu kullanın . Listedeki ilk sonuç, yürütülecek olan sonuçtur.

C: \> nerede not defteri
C: \ Windows \ System32 \ notepad.exe
C: \ Windows \ notepad.exe

Göre bu blog yayınına , where.exebu sadece vd Vista, Win 7 ile çalışması gerekir, böylece daha sonra, Windows Server 2003 ile birlikte gelen ve kapanır.

Linux'ta eşdeğeri whichkomuttur, örn which ssh.


2
+1! Bunun Windows'un bir parçası olabileceğini hiç bilmiyordum ve bu yüzden o yöne bakmadım! :)
Zabba

1
Zayıf xp kullanıcıları için herhangi bir eşdeğer?
shahar_m

@shahar_m: Aşağıdaki senaryoyu Michael Burr'dan denediniz mi? Yerleşik değil, ancak ihtiyacınız olanı yapabilir.
Chris Schmich

1
@Kenny: DLL'nin adını bildiğinizi varsayarsak, ListDLLs yardımcı programını kullanabilirsiniz ( technet.microsoft.com/en-us/sysinternals/bb896656 ). Komut satırından, listdlls -d foo.dllmodülün yüklü olduğu tüm işlemleri ve yüklenen modülün tam yolunu görmek için çalıştırın. Alternatif olarak, dosya adı için sadece bir Windows dosyası araması yapabilirsiniz.
Chris Schmich

2
@Kenny: İstediğiniz şey burada verilen cevaptan çok farklı. Yaptığınız araştırmayı içeren yeni bir Stack Overflow sorusu oluşturmalı ve bu yorumlarda ona bir bağlantı göndermelisiniz.
Chris Schmich

10

Aşağıda, aşağıdaki gibi adlandırılmış bir dosyaya kopyalayıp yapıştırabileceğiniz küçük bir cmd komut dosyası verilmiştir where.cmd:

@echo off
rem - search for the given file in the directories specified by the path, and display the first match
rem
rem    The main ideas for this script were taken from Raymond Chen's blog:
rem
rem         http://blogs.msdn.com/b/oldnewthing/archive/2005/01/20/357225.asp
rem
rem
rem - it'll be nice to at some point extend this so it won't stop on the first match. That'll
rem     help diagnose situations with a conflict of some sort.
rem

setlocal

rem - search the current directory as well as those in the path
set PATHLIST=.;%PATH%
set EXTLIST=%PATHEXT%

if not "%EXTLIST%" == "" goto :extlist_ok
set EXTLIST=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
:extlist_ok

rem - first look for the file as given (not adding extensions)
for %%i in (%1) do if NOT "%%~$PATHLIST:i"=="" echo %%~$PATHLIST:i

rem - now look for the file adding extensions from the EXTLIST
for %%e in (%EXTLIST%) do @for %%i in (%1%%e) do if NOT "%%~$PATHLIST:i"=="" echo %%~$PATHLIST:i

8

As İplik yorumunda belirtildiği, get-commandpowershell de bunu halledebiliriz. Örneğin, yazabilirsiniz get-command npmve çıktı aşağıdaki gibidir:

görüntü açıklamasını buraya girin


(get-command npm).Sourcetüm özelliklerin tüm tablosu yerine sadece npm (örnek için) yolu ile yanıt verecektir.
David Brown
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.