Windows komut satırında 'hangisinin' eşdeğeri var mı?


2352

Bazen kendi cmd betiklerimden birinin başka bir program tarafından gizlendiği (gölgeli olduğu) yol sorunlarım olduğu için, verilen Windows komut satırındaki bir programın tam yolunu bulabilmek istiyorum sadece adı.

UNIX komutuna 'hangisi' eşdeğeri var mı?

UNIX'te, which commandbu gölgeleme sorunlarını kolayca bulmak ve onarmak için verilen komutun tam yolunu yazdırır.


3
Foredecker: "which", kabuk komut istemine bir komut yazarsanız çalıştırılacak yürütülebilir dosyayı PATH'de arar.
Greg Hewgill

3
örneğin, Java'nın 5 sürümü yüklüyse ve hangisinin kullanıldığını bilmiyorsanız "hangi java" yazabilirsiniz ve bu size
PATH'yi

9
@Foredecker, MR, Win2k3'te "nerede" olduğunu söylüyor ancak Win2k3 sorunun bir parçası değildi. "Where" diğer Windows sürümlerinde değilse, diğer yanıtlar da geçerlidir. IMNSHO, tüm Windows sürümlerinde çalışan cevap en iyisidir. Ayrıca, diğer cevaplar yanlış değil, sadece bunu yapmanın farklı yolları.
paxdiablo

36
Bu sorunun SuperUser'dan önce ortaya çıktığını biliyorum, ama muhtemelen oraya ait.
palswim

16
whichStandart Unix'te komut yoktur . POSIX yardımcı programı type. C Shell'in hangi komutu vardır ve bazı sistemlerde harici çalıştırılabilir olarak bulunur. Örneğin, Debian Linux'ta, whichadlı bir paketten geliyor debutils. Bu harici whichkabuk yerleşiklerini, takma adlarını veya işlevlerini "görmez". typeyapar; Bash's type, bunu bastırmak ve sadece bir yol aramak için bir seçeneğe sahiptir.
Kaz

Yanıtlar:


2551

Windows Server 2003 ve üstü (yani Windows XP 32 bit'ten sonraki herhangi bir şey) , yalnızca yürütülebilir komutlarla değil, her tür dosyayla eşleşse de, where.exebazı şeyleri yapan programı sağlar which. (Gibi yerleşik kabuk komutları ile eşleşmez cd.) Joker karakterleri bile kabul eder, bu yüzden where nt*sizin %PATH%ve geçerli dizinde isimleri ile başlayan tüm dosyaları bulur nt.

where /?Yardım deneyin .

Windows PowerShell tanımlar Not whereiçin takma ad olarak cmdlet'indeki , böylece isterseniz , sen ihmal yerine tam adını yazmak zorunda uzantısı.Where-Objectwhere.exe.exe


30
Hayır, çünkü grep , açıkça vermeniz gereken girdilerinin içeriğini inceler . hangi ve where.exe sadece PATH ortam değişkenlerinde ayarlanmış bir dizin kümesindeki dosyaların adlarına bakar .
Michael Ratanapintha

12
Doğru, - Ajedi32 @ XP'de değildir. Dediğim gibi "Windows Server 2003 ve sonrası".
Michael Ratanapintha

24
Windows 8'de çalışır
rob

57
where.exe
JonnyRaa

17
Unutmayın where.exebir kabuk yerleşik değil, olması gerekir %windir%\system32Aşağıdaki yerlerde de %PATH%- bu durumda olmayabilir, hangi kullanma gibi whereyolunuzun ile ilgili sorunlar üzerinde çalışıyor olabileceğini düşündürmektedir!
Tomasz Gandor

288

Windows'un sonraki sürümlerinde bir wherekomut olsa da, bunu aşağıdaki gibi ortam değişkeni değiştiricileri kullanarak Windows XP ile de yapabilirsiniz:

c:\> for %i in (cmd.exe) do @echo.   %~$PATH:i
   C:\WINDOWS\system32\cmd.exe

c:\> for %i in (python.exe) do @echo.   %~$PATH:i
   C:\Python25\python.exe

Ekstra araca ihtiyacınız yoktur ve bununla sınırlı değildir, PATHçünkü kullanmak istediğiniz herhangi bir ortam değişkenini (elbette yol biçiminde) değiştirebilirsiniz.


Ve, PATHEXT'teki tüm uzantıları işleyebilecek bir tane istiyorsanız (Windows'un kendisi gibi), bu hile yapar:

@echo off
setlocal enableextensions enabledelayedexpansion

:: Needs an argument.

if "x%1"=="x" (
    echo Usage: which ^<progName^>
    goto :end
)

:: First try the unadorned filenmame.

set fullspec=
call :find_it %1

:: Then try all adorned filenames in order.

set mypathext=!pathext!
:loop1
    :: Stop if found or out of extensions.

    if "x!mypathext!"=="x" goto :loop1end

    :: Get the next extension and try it.

    for /f "delims=;" %%j in ("!mypathext!") do set myext=%%j
    call :find_it %1!myext!

:: Remove the extension (not overly efficient but it works).

:loop2
    if not "x!myext!"=="x" (
        set myext=!myext:~1!
        set mypathext=!mypathext:~1!
        goto :loop2
    )
    if not "x!mypathext!"=="x" set mypathext=!mypathext:~1!

    goto :loop1
:loop1end

:end
endlocal
goto :eof

:: Function to find and print a file in the path.

:find_it
    for %%i in (%1) do set fullspec=%%~$PATH:i
    if not "x!fullspec!"=="x" @echo.   !fullspec!
    goto :eof

Aslında tüm olasılıkları döndürür, ancak belirli arama kuralları için kolayca değiştirebilirsiniz.


7
Keşke bunu öğrenseydim! Çok kötü MS-DOS veya Win9x (yani command.com ile) ile çalışmaz. (Raymond Chen, bir toplu iş dosyasına dönüştürebileceğiniz daha ayrıntılı bir versiyona sahiptir: blogs.msdn.com/oldnewthing/archive/2005/01/20/357225.aspx )
Michael Ratanapintha

110
@Michael, eğer hala DOS veya Win95 kullanıyorsanız, yolda yürütülebilir dosyalar bulmak sorunlarınızın en
azıdır

windows .exe'den daha fazla dosyayı yürütülebilir olarak tanır. Son kez whichW95 / DOS günlerinde amdittedly bir geri kodladı, arama sırası - geçerli dir, sonra her yol dir, cmd.com için, sonra cmd.exe, sonra cmd.bat Yani, geçerli dir cmd.bat bile befroe cmd.exe soemwhere idam
Mawg diyor Monica

3
@mawg, orijinal, UNIX altında (bu uzantı ekleme hilesinin gerçekleşmediği) yansıttığı için uzantıyı bildiğiniz yerdeydi. Şimdi istediğini yapabilen bir tane ekledim ama artık komut dosyası kadar basit bir komut değil. Önce süslenmemiş komutu dener, sonra uzantıların her birini dener. Umarım yardımcı olur. Uygun gördüğünüz gibi ihtiyaçlarınıza göre ayarlayabilirsiniz (örneğin, Windows ile aynı arama sırasını istiyorsanız - bu tüm olasılıkları gösterir).
paxdiablo

2
Bunu bir toplu iş komut dosyasına dönüştürmek için "which.bat" adlı bir dosya oluşturun: @echo off for %%i in (%1) do @echo. %%~$PATH:%i cmd.exe dosyasını her çalıştırdığınızda yüklediğiniz bir alias.bat komut dosyasına eklemek için (yukarıdaki komut dosyasını C: \ usr adlı yeni bir dizine yerleştirin \ aliases): DOSKEY which=C:\usr\aliases\which.bat $* Daha sonra alias.bat dosyasıyla cmd.exe dosyasını başlatmak için bir komut dosyası oluşturabilirsiniz: cmd.exe /K E:\usr\aliases\alias.bat
Brad T.

152

PowerShell altında, Get-Commandyürütülebilir dosyalar içinde herhangi bir yerde bulabilirsiniz $Env:PATH.

Get-Command eventvwr

CommandType   Name          Definition
-----------   ----          ----------
Application   eventvwr.exe  c:\windows\system32\eventvwr.exe
Application   eventvwr.msc  c:\windows\system32\eventvwr.msc

Ayrıca yoluyla özel yürütülebilir uzantıları ile PowerShell davranırlar, işlevleri, takma ad dosyaları bulur $Env:PATHEXT(Bash en oldukça benzeyen akım kabuk için tanımlanan vs. type -a foo) - yapım daha iyi go-to diğer araçlar gibi daha where.exe, which.exevb bunlardan habersiz olan PowerShell komutları.

Adın yalnızca bir kısmını kullanarak yürütülebilir dosyalar bulma

gcm *disk*

CommandType     Name                             Version    Source
-----------     ----                             -------    ------
Alias           Disable-PhysicalDiskIndication   2.0.0.0    Storage
Alias           Enable-PhysicalDiskIndication    2.0.0.0    Storage
Function        Add-PhysicalDisk                 2.0.0.0    Storage
Function        Add-VirtualDiskToMaskingSet      2.0.0.0    Storage
Function        Clear-Disk                       2.0.0.0    Storage
Cmdlet          Get-PmemDisk                     1.0.0.0    PersistentMemory
Cmdlet          New-PmemDisk                     1.0.0.0    PersistentMemory
Cmdlet          Remove-PmemDisk                  1.0.0.0    PersistentMemory
Application     diskmgmt.msc                     0.0.0.0    C:\WINDOWS\system32\diskmgmt.msc
Application     diskpart.exe                     10.0.17... C:\WINDOWS\system32\diskpart.exe
Application     diskperf.exe                     10.0.17... C:\WINDOWS\system32\diskperf.exe
Application     diskraid.exe                     10.0.17... C:\WINDOWS\system32\diskraid.exe
...

Özel yürütülebilir dosyalar bulma

Windows dışındaki diğer yürütülebilir dosyaları (python, ruby, perl, vb.) Bulmak için, yürütülebilir dosyalardaki bu uzantılara sahip dosyaları tanımlamak üzere bu PATHEXTdeğişkenlerin dosya uzantılarının çevresel değişkene (varsayılan olarak .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL) eklenmesi gerekir PATH. Get-CommandBu değişkeni de onurlandırdığı gibi , özel yürütülebilir dosyaları listelemek için genişletilebilir. Örneğin

$Env:PATHEXT="$Env:PATHEXT;.dll;.ps1;.psm1;.py"     # temporary assignment, only for this shell's process

gcm user32,kernel32,*WASM*,*http*py

CommandType     Name                        Version    Source
-----------     ----                        -------    ------
ExternalScript  Invoke-WASMProfiler.ps1                C:\WINDOWS\System32\WindowsPowerShell\v1.0\Invoke-WASMProfiler.ps1
Application     http-server.py              0.0.0.0    C:\Users\ME\AppData\Local\Microsoft\WindowsApps\http-server.py
Application     kernel32.dll                10.0.17... C:\WINDOWS\system32\kernel32.dll
Application     user32.dll                  10.0.17... C:\WINDOWS\system32\user32.dll

İle sal which gcmkısa bir takma ad oluşturabilirsiniz (kısa biçimi set-alias which get-command).

Daha fazla bilgi ve örnekler için çevrimiçi yardım bölümünde bulunabilir Get-Command.


2
Sadece çalıştırılabilir dosyalardan çok daha fazlasını bulur. Ayrıca komut dosyalarını yakalar
Maximilian Burszley

2
@ TheIncorrigible1 - toplu iş dosyaları ( , vb.) Gibi komut dosyalarını kastediyorsanız , uzantıları değişkente adlandırıldığı için (bunlar varsayılan olarak ) yürütülebilir sayılır . Diğer yürütülebilir türler (örn . , Vb.), Dosya uzantısını ekleyerek ve / - örn. Docs.python.org/3.3/using/….BAT.CMDPATHEXTPATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL.py.rbassocftype
shalomb ile


40

PowerShell yüklüyse (bunu öneririm), aşağıdaki komutu kabaca eşdeğer olarak kullanabilirsiniz (yürütülebilir adınız için programAdı yerine):

($Env:Path).Split(";") | Get-ChildItem -filter programName*

Daha fazlası burada: My Manwich! Hangi PowerShell


1
Bu tam özlü powershell komutunu arıyordum. Where.exe kullanıyordum ama çıktı ayrıştırma üstündeki hata kodu ile uğraşmak zorunda kaldım yerel powershell çözüm çok daha düşük. Teşekkürler!
scobi

9
Ama yazmak ($Env:Path).Split(";") | Get-ChildItem -filter programName*çok kolay ... ;-)
Craig

Bu, yolunuzda normalde sistem tarafından çözümlenen bir değişkeniniz varsa da başarısız olur (aka% JAVA_HOME%).
dragon788

Hangi.exe çalışmak için alamıyorum, bunu denedim ve çalıştı.
Asfand Qazi


24

Windows CMD whichçağrılarında where:

$ where php
C:\Program Files\PHP\php.exe

17

Cygwin bir çözümdür. Üçüncü taraf bir çözüm kullanmayı düşünmezseniz, Cygwin gidilecek yoldur.

Cygwin size Windows ortamında * nix rahatlığı sağlar (ve bunu Windows komut kabuğunuzda kullanabilir veya istediğiniz * nix kabuğunu kullanabilirsiniz). whichWindows için size bir dizi * nix komutu (gibi ) verir ve bu dizini bilgisayarınıza ekleyebilirsiniz PATH.


10
GnuWin32 Eğer yerli olabilir olarak çok daha iyi bu durumda olan Ferruccio tarafından önce de belirttiğimiz nerede yürütülebilir yalnız.
Piotr Dobrogost

GnuWin32 harika ve ben kullanıyorum, ama eğer GnuWin32 araçlarını yüklemeden bu işlevselliği istiyorsanız where.exe doğru çağrı gibi görünüyor. Her ne kadar, GnuWin32 araçlarını ağımızdaki \ bin $ paylaşımına koydum, böylece bunları yerel olarak yüklü olmayan iş istasyonlarından (ve toplu iş dosyalarında) kullanabilirim.
Craig

1
Windows'da Cygwin kullanımı hakkında konuştuğumda, şunu tercih ederim: cygpath -w "` `<appname>` `
mpasko256

12

PowerShell'de bu, gcmdiğer komutlar hakkında biçimlendirilmiş bilgi verir. Yalnızca yürütülebilir dosyanın yolunu almak istiyorsanız kullanın .Source.

Örneğin: gcm gitveya(gcm git).Source

çerez:

  • Windows XP için kullanılabilir.
  • PowerShell 1.0'dan beri kullanılabilir.
  • gcmGet-Commandcmdlet'in takma adıdır .
  • Herhangi bir parametre olmadan, ana bilgisayar kabuğu tarafından sunulan tüm kullanılabilir komutları listeler.
  • Sen ile özel bir takma adı oluşturabilirsiniz Set-Alias which gcmve benzeri kullanın: (which git).Source.
  • Resmi dokümanlar: https://technet.microsoft.com/en-us/library/ee176842.aspx

11

PowerShell profilimde 'which' adında bir işlevim var

function which {
    get-command $args[0]| format-list
}

Çıktı şöyle görünür:

PS C:\Users\fez> which python


Name            : python.exe
CommandType     : Application
Definition      : C:\Python27\python.exe
Extension       : .exe
Path            : C:\Python27\python.exe
FileVersionInfo : File:             C:\Python27\python.exe
                  InternalName:
                  OriginalFilename:
                  FileVersion:
                  FileDescription:
                  Product:
                  ProductVersion:
                  Debug:            False
                  Patched:          False
                  PreRelease:       False
                  PrivateBuild:     False
                  SpecialBuild:     False
                  Language:

Diğer çözümlerin hiçbiri benim için > get-command app.exe | format-listişe yaramadı ama mükemmel çalıştı!
Alexander McFarlane

10

Buradan unxutils alın: http://sourceforge.net/projects/unxutils/

Windows platformlarında altın, tüm güzel unix yardımcı programlarını standart bir Windows DOS üzerine koyar. Yıllardır kullanıyor.

Bir 'hangi' dahil. Yine de büyük / küçük harfe duyarlı olduğunu unutmayın.

Not: yüklemek için bir yere zip patlayabilir ve sistem yolu env değişkeninize ... \ UnxUtils \ usr \ local \ wbin \ ekleyin.


2
büyük / küçük harfe duyarlı değil, aynı zamanda hangi java yerine hangi java.exe söylemek zorunda - windows 7
Kalpesh Soni

Yeni satırlarla ilgili olsa da birkaç hayal kırıklığı var; Örneğin grep, bir .\ r koymadan EOL ile eşleşmez . Yine de% 99'luk bir çözüm!
dash-tom-bang

Evet, büyük / küçük harfe duyarlı değildir, ancak Windows'daki varsayılan dosya adları büyük / küçük harfe duyarlı değildir.
Wernfried Domscheit

8

Stokta yok Windows ama tarafından sağlanan Unix Hizmetleri ve aynı şeyi böyle Bunun etrafında yüzen birkaç basit toplu komut vardır bu bir .


1
Bağladığınız komutun yalnızca PATH değişkenini çıkarması ve dosyanın orada bulunup bulunmadığını kontrol etmesi dışında.
Angel O'Sphere

8

Ücretsiz bir Pascal derleyicisi bulabilirseniz, bunu derleyebilirsiniz. En azından çalışır ve gerekli algoritmayı gösterir.

program Whence (input, output);
  Uses Dos, my_funk;
  Const program_version = '1.00';
        program_date    = '17 March 1994';
  VAR   path_str          : string;
        command_name      : NameStr;
        command_extension : ExtStr;
        command_directory : DirStr;
        search_dir        : DirStr;
        result            : DirStr;


  procedure Check_for (file_name : string);
    { Check existence of the passed parameter. If exists, then state so   }
    { and exit.                                                           }
  begin
    if Fsearch(file_name, '') <> '' then
    begin
      WriteLn('DOS command = ', Fexpand(file_name));
      Halt(0);    { structured ? whaddayamean structured ? }
    end;
  end;

  function Get_next_dir : DirStr;
    { Returns the next directory from the path variable, truncating the   }
    { variable every time. Implicit input (but not passed as parameter)   }
    { is, therefore, path_str                                             }
    var  semic_pos : Byte;

  begin
      semic_pos := Pos(';', path_str);
      if (semic_pos = 0) then
      begin
        Get_next_dir := '';
        Exit;
      end;

      result := Copy(Path_str, 1, (semic_pos - 1));  { return result   }
      { Hmm! although *I* never reference a Root drive (my directory tree) }
      { is 1/2 way structured), some network logon software which I run    }
      { does (it adds Z:\ to the path). This means that I have to allow    }
      { path entries with & without a terminating backslash. I'll delete   }
      { anysuch here since I always add one in the main program below.     }
      if (Copy(result, (Length(result)), 1) = '\') then
         Delete(result, Length(result), 1);

      path_str := Copy(path_str,(semic_pos + 1),
                       (length(path_str) - semic_pos));
      Get_next_dir := result;
  end;  { Of function get_next_dir }

begin
  { The following is a kludge which makes the function Get_next_dir easier  }
  { to implement. By appending a semi-colon to the end of the path         }
  { Get_next_dir doesn't need to handle the special case of the last entry }
  { which normally doesn't have a semic afterwards. It may be a kludge,    }
  { but it's a documented kludge (you might even call it a refinement).    }
  path_str := GetEnv('Path') + ';';

  if (paramCount = 0) then
  begin
    WriteLn('Whence: V', program_version, ' from ', program_date);
    Writeln;
    WriteLn('Usage: WHENCE command[.extension]');
    WriteLn;
    WriteLn('Whence is a ''find file''type utility witha difference');
    Writeln('There are are already more than enough of those :-)');
    Write  ('Use Whence when you''re not sure where a command which you ');
    WriteLn('want to invoke');
    WriteLn('actually resides.');
    Write  ('If you intend to invoke the command with an extension e.g ');
    Writeln('"my_cmd.exe param"');
    Write  ('then invoke Whence with the same extension e.g ');
    WriteLn('"Whence my_cmd.exe"');
    Write  ('otherwise a simple "Whence my_cmd" will suffice; Whence will ');
    Write  ('then search the current directory and each directory in the ');
    Write  ('for My_cmd.com, then My_cmd.exe and lastly for my_cmd.bat, ');
    Write  ('just as DOS does');
    Halt(0);
  end;

  Fsplit(paramStr(1), command_directory, command_name, command_extension);
  if (command_directory <> '') then
  begin
WriteLn('directory detected *', command_directory, '*');
    Halt(0);
  end;

  if (command_extension <> '') then
  begin
    path_str := Fsearch(paramstr(1), '');    { Current directory }
    if   (path_str <> '') then WriteLn('Dos command = "', Fexpand(path_str), '"')
    else
    begin
      path_str := Fsearch(paramstr(1), GetEnv('path'));
      if (path_str <> '') then WriteLn('Dos command = "', Fexpand(path_str), '"')
                          else Writeln('command not found in path.');
    end;
  end
  else
  begin
    { O.K, the way it works, DOS looks for a command firstly in the current  }
    { directory, then in each directory in the Path. If no extension is      }
    { given and several commands of the same name exist, then .COM has       }
    { priority over .EXE, has priority over .BAT                             }

    Check_for(paramstr(1) + '.com');     { won't return if file is found }
    Check_for(paramstr(1) + '.exe');
    Check_for(paramstr(1) + '.bat');

    { Not in current directory, search through path ... }

    search_dir := Get_next_dir;

    while (search_dir <> '') do
    begin
       Check_for(search_dir + '\' + paramstr(1) + '.com');
       Check_for(search_dir + '\' + paramstr(1) + '.exe');
       Check_for(search_dir + '\' + paramstr(1) + '.bat');
       search_dir := Get_next_dir;
    end;

    WriteLn('DOS command not found: ', paramstr(1));
  end;
end.

21
Vay be, hala Pascal kullanan insanlar var mı? :-)
paxdiablo 26:30

6
Var olduğunu hayal ediyorum. Ama ben değil. Program_date = '17 Mart 1994 'satırını gördünüz mü;
Mawg, Monica

1
Ünite gerekli değil my_funk;. Bir Pascal programı gönderdiğiniz için teşekkürler, bana gençliğimi hatırlatıyor! O kadar yazık ki Pascal gelişmemişti.
yannis

2
Oh, ama oldu. Örneğin, şimdi nesne yönelimlidir. Lazarus-ide.org'da harika bir ücretsiz, çapraz platform, uygulama ve IDE var ve Borland'ın doğrudan torunu hala başlangıç ​​sürümü için 299 $ olan çok pahalı (imo) embarcadero.com/products/delphi'de Delphi'de yaşıyor ve "kullanılabilir" sürüm için 1 bin dolar. Ancak, platformlar arası - windows, iOs, Mac, Android. Deneme sürümü edinin veya Lazarus'u kullanın ve 20 yaş daha genç hissedin, -)
Mawg, Monica

1
@yannis "Pascal'ın evrimleşmediği üzücü" ... "Turbo Pascal" Anders dışında C # tasarlamaya devam mı ediyorsun?
15:01

7

Windows üzerinde bulunan bu ben oldum en iyi sürümü dan (kaynağıyla) kullanılabilir Yusuf Emeği Geçenler "whereis" programı vardır kendi sitesi .

"Whereis" in gelişimi ile ilgili makale okumaya değer.


1
Son yorum: Burada Win 7 64 bit altında 64 bit yürütülebilir dosyaları bulmakta sorunlar var.
Axel Kemper


6

İnternette bulabildiğim Unix'in Win32 bağlantı noktalarının hiçbiri tatmin edici değil, çünkü hepsinin bir veya daha fazla eksikliği var:

  • Windows PATHEXT değişkeni için destek yok. (Bu, yolu taramadan önce her bir komuta dolaysız olarak eklenen uzantıların listesini tanımlar ve hangi sırayla.) (Çok fazla tcl komut dosyası kullanıyorum ve hangi aracın bunları bulabileceği herkese açık değil.)
  • Cmd.exe kod sayfaları için destek yok, bu da onları ascii olmayan karakterler içeren yolları yanlış görüntülemelerini sağlar. (Buna çok duyarlıyım, ilk adımda ç ile :-))
  • Cmd.exe ve PowerShell komut satırında farklı arama kuralları için destek yoktur. (Herkese açık hiçbir araç bir PowerShell penceresinde .ps1 komut dosyaları bulamaz, ancak cmd penceresinde bulamaz!)

Sonunda, yukarıdakileri doğru bir şekilde destekleyen, kendi yazdım.

Orada mevcut: http://jf.larvoire.free.fr/progs/which.exe


FYI Yukarıda belirtilen which.exe aracımı ve diğerlerini github.com/JFLarvoire/SysToolsLib'de açık kaynaklı olarak kullandım . Orada en son sürümü alabilir, sorunları bildirebilir, vb.
Jean-François Larvoire

6

Bu toplu iş dosyası, yolda yürütülecek komutu bulmak için CMD değişken işlemeyi kullanır. Not: geçerli dizinin her zaman yoldan önce yapıldığını) ve hangi API çağrısının kullanıldığına bağlı olarak diğer konumlar yoldan önce / sonra aranır.

@echo off
echo. 
echo PathFind - Finds the first file in in a path
echo ======== = ===== === ===== ==== == == = ====
echo. 
echo Searching for %1 in %path%
echo. 
set a=%~$PATH:1
If "%a%"=="" (Echo %1 not found) else (echo %1 found at %a%)

set /?Yardım için bakınız .


6

Cygwin'in hafif bir sürümü olan GOW (Windows'ta GNU) kullanıyorum. Buradan GitHub'dan alabilirsiniz .

GOW (Windows'ta GNU), Cygwin'e hafif bir alternatiftir. Yerel win32 ikili dosyaları olarak derlenmiş yaklaşık 130 son derece kullanışlı açık kaynaklı UNIX uygulaması yükleyen kullanışlı bir Windows yükleyicisi kullanır. Seçeneklere bağlı olarak 100 MB'ın üzerinde çalışabilen Cygwin'in aksine mümkün olduğunca küçük, yaklaşık 10 MB olacak şekilde tasarlanmıştır. - Hakkında Açıklama (Brent R. Matzelle)

GOW'da bulunan komutların bir listesinin ekran görüntüsü:

Resim açıklamasını buraya girin


5

Ned Batchelder benzeri bir araç oluşturdum:

PATH .dll ve .exe dosyalarını arama

Benim aracı öncelikle çeşitli dll sürümleri aramak için olsa da daha fazla bilgi gösterir (tarih, boyut, sürüm) ama PATHEXT kullanmayın (yakında benim aracı güncellemek istiyoruz).


5

Sadece bu Windows'un bir liner toplu iş dosyasını göndermelisiniz:

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

Eğer kod kaydırmak eğer Pek tek liner setlocal enableextensionsve endlocal.


2
Bunu anlamak için birden çok satırda tercih ederdim. ;-)
Gringo Suave

4

Windows XP kullanıcıları için ( whereyerleşik komutu olmayan ), rubygem olarak adlandırılan bir "like like" komutu yazdım whichr.

Yüklemek için Ruby'yi yükleyin.

Sonra

gem install whichr

Gibi çalıştırın:

C:> whor Instagram Hesabındaki Resim ve Videoları cmd_here


3
Windows XP'de herhangi bir şey yapmayı önerdiğiniz için indirilmediğinizden şüpheleniyorum.
sebastian-c

1
Önemsiz kaldı ama önemsiz bir komut uygulamak için Ruby'yi yüklemek de zor bir satış. Yukarıda bir toplu iş komut dosyasına yerleştirilebilecek bir for döngüsü vardır.
Gringo Suave

2
Ayrıntılı modda çalıştırırsanız açılış çizgilerini The Witcher için tema şarkısına yazdırıyor mu ? ;)
Agi Hammerthief

3

JPSoft TCC ve TCC / LE önemli işlevsellik katan CMD.EXE değiştirmeleridir. OP'nin sorusuyla ilgili, whichTCC ailesi komut işlemcileri için yerleşik bir komuttur.


2

whichModülü bir süre npm'den kullandım ve çok iyi çalışıyor: https://www.npmjs.com/package/which Harika bir çoklu platform alternatifi.

Şimdi whichGit ile gelen şeye geçtim . /usr/binYolunuza, genellikle adresindeki Git'ten yol ekleyin C:\Program Files\Git\usr\bin\which.exe. whichİkili olacak C:\Program Files\Git\usr\bin\which.exe. Daha hızlıdır ve beklendiği gibi çalışır.


1

bunu dene

set a=%~$dir:1
If "%for%"=="" (Echo %1 not found) else (echo %1 found at %a%)
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.