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.

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.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.