Nasıl cmd.exe "hangi <binary>"


10

Hızla ikili %PATH%değişkenin ( değişkenin işaret ettiği) nerede olduğunu belirlemenin bir yolu var mı .

Bu which perlgeleneksel bir unix kabuğundaki karşılığıdır.

Kaynak Kit'in bir wherekomutu olduğunu anlıyorum , ancak bu kit (kurumsal) bilgisayarımda yüklü değil, bu yüzden kullanamıyorum where.

Yanıtlar:


14

Bir cmd.exe tek astarı which:

for %G in (<binary.exe>) do @echo.%~$PATH:G

Basit bir which.bat olarak kodlayabilirsiniz:

@echo off
for %%G in (%1) do @echo.%%~$PATH:G

EDIT: ikili tam adı gerektirir: which perl.exedeğil which perl. % PATHEXT% değerini dikkate alan bir toplu iş dosyası yazmak mümkündür, bu nedenle ikili dosyanın tam adına ihtiyaç duymaz. İhtiyacınız olursa lütfen bana bildirin.

EDIT2: Yine de toplu iş dosyası yazmaya karar verdim. İşte burada:

@echo off
setlocal enabledelayedexpansion

set ext= ;%PATHEXT%
:extloop1
for /f "delims=; tokens=1,*" %%A in ("!ext!") do (
  if exist %1%%A (
    echo .\%1%%A
    goto finish
  )
  set ext=%%B
)
if "!ext!" neq "" goto extloop1

set ext= ;%PATHEXT%
:extloop2
for /f "delims=; tokens=1,*" %%A in ("!ext!") do (
  for %%C in (%1%%A) do (
    if exist %%~$PATH:C (
      echo %%~$PATH:C
      goto finish
    )
  )
  set ext=%%B
)
if "!ext!" neq "" goto extloop2

:finish
endlocal

İlk olarak, Bob'un önerisine göre, ikili dizinin geçerli dizinde olup olmadığını kontrol eder. İkili bulunmazsa,% PATH% değişkeni üzerinden arama yapan başka bir döngü yürütülür.

Döngüler temel alınır if ... goto, forkomut yalnızca extdeğeri ';' ile ayırmak için kullanılır karakter. Değeri %PATHEXT%ikisi de - tam adlandırılmış ikili aramaya izin veren boş bir uzantısıyla başa eklenmesi which perlve which perl.exeeserleri.


1
Eğer genişletilmiş bir toplu iş dosyası yazmayı bitirirseniz, tüm yol boyunca gidip önce kontrol edebilirsiniz .\binary.*. İşletim sistemi, komut yolundaki dizinleri aramadan önce her zaman önce geçerli dizinde arama yapar.
Bob

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.