Karena saya kadang-kadang memiliki masalah jalur, di mana salah satu skrip cmd saya disembunyikan (dibayangi) oleh program lain (sebelumnya di jalur), saya ingin dapat menemukan path lengkap ke program pada baris perintah Windows, mengingat hanya namanya saja.
Apakah ada yang setara dengan perintah UNIX 'yang'?
Pada UNIX, which command
mencetak path lengkap dari perintah yang diberikan untuk dengan mudah menemukan dan memperbaiki masalah bayangan ini.
which
perintah di Unix standar. Utilitas POSIX adalahtype
. C Shell memiliki perintah yang mana, dan beberapa sistem memilikinya sebagai executable eksternal. Misalnya, di Debian Linux,which
berasal dari paket yang disebutdebutils
. Eksternalwhich
ini tidak "melihat" shell built-in, alias atau fungsi.type
tidak; Bash'stype
memiliki opsi untuk menekan itu dan hanya melakukan pencarian path.Jawaban:
Windows Server 2003 dan yang lebih baru (yaitu apa saja setelah Windows XP 32 bit) menyediakan
where.exe
program yang melakukan beberapa halwhich
, meskipun cocok dengan semua jenis file, bukan hanya perintah yang dapat dieksekusi. (Ini tidak cocok dengan perintah shell built-in seperticd
.) Ia bahkan akan menerima wildcard, jadiwhere nt*
temukan semua file di%PATH%
direktori Anda dan saat ini yang namanya dimulai dengannt
.Cobalah
where /?
minta bantuan.Perhatikan bahwa Windows PowerShell mendefinisikan
where
sebagai alias untuk yangWhere-Object
cmdlet , jadi jika Anda inginwhere.exe
, Anda perlu mengetik nama lengkap bukan menghilangkan.exe
ekstensi.sumber
where.exe
bukan shell builtin, Anda harus memiliki%windir%\system32
pada Anda%PATH%
- yang mungkin tidak terjadi, karena menggunakanwhere
menunjukkan bahwa Anda mungkin sedang mengerjakan masalah dengan jalan Anda!Sementara versi Windows yang lebih baru memiliki
where
perintah, Anda juga dapat melakukan ini dengan Windows XP dengan menggunakan pengubah variabel lingkungan, sebagai berikut:Anda tidak memerlukan alat tambahan apa pun dan itu tidak terbatas
PATH
karena Anda dapat mengganti variabel lingkungan apa pun (dalam format jalur, tentu saja) yang ingin Anda gunakan.Dan, jika Anda menginginkannya yang dapat menangani semua ekstensi di PATHEXT (seperti halnya Windows itu sendiri), yang ini berguna:
Sebenarnya mengembalikan semua kemungkinan tetapi Anda dapat men-tweak dengan mudah untuk aturan pencarian tertentu.
sumber
which
kembali dalam W95 / DOS hari amdittedly, urutan pencarian adalah - dir saat ini, lalu setiap path path, untuk cmd.com, lalu cmd.exe, lalu cmd.bat Jadi, bahkan cmd.bat di dir saat ini adalah dieksekusi befroe cmd.exe soemwhere di jalan@echo off for %%i in (%1) do @echo. %%~$PATH:%i
Untuk menambahkannya ke skrip alias.bat yang Anda muat setiap kali Anda menjalankan cmd.exe (letakkan skrip di atas dalam direktori baru bernama C: \ usr \ aliases):DOSKEY which=C:\usr\aliases\which.bat $*
Kemudian Anda dapat membuat skrip untuk meluncurkan cmd.exe dengan file alias.bat:cmd.exe /K E:\usr\aliases\alias.bat
Di bawah PowerShell,
Get-Command
akan menemukan executable di mana saja di$Env:PATH
.Ia juga menemukan cmdlet PowerShell, fungsi, alias, file dengan ekstensi kustom yang dapat dieksekusi via
$Env:PATHEXT
, dll. Didefinisikan untuk shell saat ini (sangat mirip dengan Bashtype -a foo
) - membuatnya lebih baik daripada alat-alat lain sepertiwhere.exe
,which.exe
, dll yang tidak menyadari ini Perintah PowerShell.Menemukan executable hanya menggunakan sebagian dari nama
Menemukan custom executable
Untuk menemukan executable non-windows lainnya (python, ruby, perl, dll), ekstensi file untuk executable tersebut perlu ditambahkan ke
PATHEXT
variabel lingkungan (default ke.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
) untuk mengidentifikasi file dengan ekstensi ini diPATH
sebagai executable. SepertiGet-Command
juga menghormati variabel ini, itu dapat diperluas ke daftar executable kustom. misalnyaAnda dapat dengan cepat mengatur alias dengan
sal which gcm
(bentuk pendek dariset-alias which get-command
).Informasi dan contoh lebih lanjut dapat ditemukan di bawah bantuan online untuk
Get-Command
.sumber
.BAT
,,.CMD
dll), mereka dianggap dapat dieksekusi karena ekstensi mereka dinamai dalamPATHEXT
variabel (yang secara default adalahPATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
). Jenis yang dapat dieksekusi lainnya (mis.py
..rb
, Dll) dapat ditambahkan dengan menambahkan ekstensi file dan menciptakan asosiasi yang dapat dieksekusi denganassoc
/ftype
- mis. Docs.python.org/3.3/using/…Di Windows PowerShell:
sumber
Jika Anda telah menginstal PowerShell (yang saya sarankan), Anda dapat menggunakan perintah berikut ini sebagai setara kasar (gantilah nama program untuk nama yang dapat dieksekusi):
Lebih banyak di sini: My Manwich! PowerShell Yang
sumber
($Env:Path).Split(";") | Get-ChildItem -filter programName*
sangat mudah untuk mengetik ... ;-)Perangkat GnuWin32 memiliki
which
, bersama dengan banyak alat Unix lainnya.sumber
Dalam
which
panggilan CMD Windowswhere
:sumber
Cygwin adalah solusi. Jika Anda tidak keberatan menggunakan solusi pihak ketiga, maka Cygwin adalah cara untuk pergi.
Cygwin memberi Anda kenyamanan * nix di lingkungan Windows (dan Anda dapat menggunakannya di shell perintah Windows Anda, atau menggunakan shell * nix pilihan Anda). Ini memberi Anda sejumlah besar perintah * nix (seperti
which
) untuk Windows, dan Anda bisa saja memasukkan direktori itu diPATH
.sumber
Di PowerShell,
gcm
yang memberikan informasi yang diformat tentang perintah lain. Jika Anda ingin mengambil hanya path ke executable, gunakan.Source
.Misalnya:
gcm git
atau(gcm git).Source
Informasi:
gcm
adalah alias dariGet-Command
cmdlet .Set-Alias which gcm
dan menggunakannya seperti:(which git).Source
.sumber
Saya memiliki fungsi di profil PowerShell saya bernama 'which'
Seperti inilah hasilnya:
sumber
> get-command app.exe | format-list
bekerja dengan sempurna!Dapatkan unxutils dari sini: http://sourceforge.net/projects/unxutils/
emas pada platform windows, menempatkan semua utilitas unix yang bagus pada DOS windows standar. Sudah menggunakannya selama bertahun-tahun.
Ini memiliki 'yang' disertakan. Perhatikan bahwa case case sensitif.
NB: untuk menginstalnya meledak zip di suatu tempat dan tambahkan ... \ UnxUtils \ usr \ local \ wbin \ ke jalur sistem Anda env variabel.
sumber
.
untuk. Ini adalah solusi 99% yang pasti!Tidak dalam saham Windows tapi disediakan oleh Layanan untuk Unix dan ada beberapa script sederhana batch yang mengambang di sekitar yang mencapai hal yang sama seperti ini yang satu ini .
sumber
Jika Anda dapat menemukan kompilator Pascal gratis, Anda dapat mengkompilasi ini. Setidaknya itu berfungsi dan menunjukkan algoritma yang diperlukan.
sumber
my_funk;
tidak perlu. Terima kasih telah memposting program Pascal, mengingatkan saya pada masa muda saya! Sangat disayangkan bahwa Pascal tidak berevolusi.Versi terbaik dari ini yang saya temukan di Windows adalah utilitas "whereis" Joseph Newcomer, yang tersedia (dengan sumber) dari situsnya .
Artikel tentang pengembangan "whereis" layak dibaca.
sumber
Pertama-tama Anda dapat menginstal Git dari Mengunduh Git , dan kemudian buka Git Bash dan ketik:
sumber
Tidak satu pun dari port Win32 Unix yang dapat saya temukan di Internet memuaskan, karena mereka semua memiliki satu atau lebih dari kekurangan ini:
Jadi saya akhirnya menulis sendiri, yang mendukung semua hal di atas dengan benar.
Tersedia di sana: http://jf.larvoire.free.fr/progs/which.exe
sumber
File batch ini menggunakan penanganan variabel CMD untuk menemukan perintah yang akan dieksekusi di path. Catatan: direktori saat ini selalu dilakukan sebelum path) dan tergantung pada panggilan API mana yang digunakan, lokasi lain dicari sebelum / setelah path.
Lihat
set /?
bantuan.sumber
Saya menggunakan GOW (GNU pada Windows) yang merupakan versi ringan dari Cygwin. Anda dapat mengambilnya dari GitHub di sini .
Tangkapan layar daftar perintah yang termasuk dalam GOW:
sumber
Saya telah membuat alat yang mirip dengan Ned Batchelder:
Mencari file .dll dan .exe di PATH
Sementara alat saya terutama untuk mencari berbagai versi dll itu menunjukkan lebih banyak info (tanggal, ukuran, versi) tetapi tidak menggunakan PATHEXT (Saya berharap untuk memperbarui alat saya segera).
sumber
Hanya perlu memposting file batch satu liner Windows ini:
Sebuah tes:
Tidak cukup satu-liner jika Anda memasukkan kode
setlocal enableextensions
danendlocal
.sumber
Untuk Anda pengguna Windows XP (yang tidak memiliki
where
perintah bawaan), saya telah menulis perintah "di mana suka" sebagai rubygem yang disebutwhichr
.Untuk menginstalnya, instal Ruby.
Kemudian
Jalankan seperti:
C:> whichr cmd_di sini
sumber
TCC dan TCC / LE dari JPSoft adalah pengganti CMD.EXE yang menambahkan fungsionalitas yang signifikan. Relevan dengan pertanyaan OP,
which
adalah perintah bawaan untuk prosesor perintah keluarga TCC.sumber
Saya telah menggunakan
which
modul dari npm cukup lama, dan itu bekerja dengan sangat baik: https://www.npmjs.com/package/which Ini adalah alternatif multi platform yang hebat.Sekarang saya beralih ke
which
yang datang dengan Git. Tambahkan saja path Anda/usr/bin
path dari Git, yang biasanya diC:\Program Files\Git\usr\bin\which.exe
. Thewhich
biner akan berada diC:\Program Files\Git\usr\bin\which.exe
. Lebih cepat dan juga berfungsi seperti yang diharapkan.sumber
coba ini
sumber