Bagaimana saya bisa "yang <biner>" di cmd.exe

10

Apakah ada cara untuk dengan cepat menentukan di mana biner (yang %PATH%menunjuk ke variabel) berada.

Itu adalah sesuatu yang akan melakukan yang setara which perldalam shell unix tradisional.

Saya mengerti bahwa Resource kit memiliki whereperintah, tetapi kit ini tidak diinstal pada komputer saya (perusahaan), jadi saya tidak bisa menggunakan where.

René Nyffenegger
sumber

Jawaban:

14

Satu cmd.exe untuk which:

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

Anda dapat mengkodekannya sebagai that.bat sederhana:

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

EDIT: memerlukan nama lengkap biner:, which perl.exetidak which perl. Dimungkinkan untuk menulis file batch yang mempertimbangkan% PATHEXT%, sehingga tidak perlu nama lengkap biner. Tolong beri tahu saya jika Anda membutuhkannya.

EDIT2: Lagi pula saya memutuskan untuk menulis file batch. Ini dia:

@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

Pertama, sesuai dengan saran Bob, ia memeriksa apakah biner ada di direktori saat ini. Jika biner tidak ditemukan, loop lain dijalankan yang melakukan pencarian melalui variabel% PATH%.

Loop didasarkan if ... goto, forperintah hanya digunakan untuk membagi extnilai dengan ';' karakter. Nilai %PATHEXT%ini diawali dengan ekstensi kosong, yang memungkinkan untuk mencari biner yang sepenuhnya bernama - keduanya which perldan which perl.exeberfungsi.

MBu
sumber
1
Nah, jika Anda akhirnya menulis file batch yang diperluas, mungkin sebaiknya jalan terus dan periksa .\binary.*dulu. Sistem operasi selalu mencari di direktori saat ini terlebih dahulu, sebelum mencari direktori di jalur perintah.
Bob