it-swarm.asia

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

Bir konsolda bunun gibi çalıştırılabilir programların konumlarını bulmak için where adı verilen 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?

128
David.Chu.ca

Linux'ta hangi komutunu düşünüyor olabilirsiniz.

$ which bash
/bin/bash

Windows'ta eşdeğer bir aracın farkında değilim.

EDIT: Sadece bu işlevi sizin için sağlayacak olan Unix Utils for Windows adlı bir paket olduğunu hatırladım.

3
djhowell

StackOverflow cevabına göre - 'pencerelerinde' hangisinin eşdeğeri var mı? , where.exe bunu Windows 7 ve Windows Server 2003 ve sonraki sürümlerinde yapar:

Örnek

C:\> where ping

Çıktı:

C:\Windows\System32\PING.EXE
301
Simon D

EDIT: Eklemeliydim, Prompt komutundan 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, UNIX Shell yerleşik "hangi" ve "locate" komutu arasındaki bir geçiş gibidir, çünkü hem komut ç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 İsteminden çalıştırabileceğiniz herhangi bir komut, NEREDE komutu tarafından bulunur. (Çünkü bunun gibi herhangi bir komut PATH değişkeni listesinde zaten var.)

Komut yolu değişkeninde only öğesini aramak 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: "WHERE dxdiag" de işe yarayabilirdi, çünkü C:\Windows\System32 PATH değişkeninde.)

WHERE /R C:\Windows dxdiagn

Öte yandan, ".dll" PATHEXT içinde değil olduğundan hiçbir sonuç döndüremez.

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

Başarıyla döndürür hepsi dxdiagn.dll sürümleri.

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

19
geo

dir kullanın:

cd \
dir /s /b mytool.exe

cd \ bölümü, aramanın hiyerarşinin tepesinde başlamasını sağlamak için sizi sürücünün köküne değiştirir.

10
John T

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
7
Rob Jens

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

Ancak, bunlardan 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.

Sonrawhich cmd.exegibi çalıştırın, cmd yazdığınızda çalıştırılacak cmd.exe dosyasını bulun.

3
b w

Pencerelerde, ücretsiz yardımcı programını kullanabilirsiniz Her şeyi arama motoru aramak için anında herhangi bir dosyayı tam veya kısmi bir ada göre (eğer sabit diskiniz ntfs biçiminde ise).

3
harrymc

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
1
Anupam

Eğer sadece hangisini istiyorsanız, GnuWin32 project projesinde tekil yükleyicilerle birlikte bir sürü unix var.

1
Justin Love

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
Anonymous Coward