Pertanyaan Apakah ada yang setara dengan 'yang' pada baris perintah Windows?


Karena saya terkadang memiliki masalah jalur, di mana salah satu skrip cmd saya disembunyikan (dibayangi) oleh program lain (sebelumnya di jalan), saya ingin dapat menemukan jalur lengkap ke program pada baris perintah Windows, diberikan hanya namanya saja.

Apakah ada yang setara dengan perintah UNIX 'yang mana'?

Di UNIX, which command mencetak path lengkap dari perintah yang diberikan untuk dengan mudah menemukan dan memperbaiki masalah bayangan ini.


1896
2017-11-20 04:19


asal


Jawaban:


Windows Server 2003 dan yang lebih baru (yaitu apa pun setelah Windows XP 32 bit) menyediakan where.exe program yang melakukan sebagian dari apa which tidak, meskipun cocok dengan semua jenis file, bukan hanya perintah yang dapat dieksekusi. (Ini tidak cocok dengan perintah shell built-in seperti cd.) Bahkan akan menerima wildcard, jadi where nt* menemukan semua file di Anda %PATH% dan direktori saat ini yang namanya dimulai dengan nt.

Mencoba where /? untuk bantuan.

Perhatikan bahwa Windows PowerShell mendefinisikan where sebagai alias untuk itu Where-Object cmdlet, jadi jika Anda mau where.exe, Anda perlu mengetikkan nama lengkap alih-alih menghilangkan .exe perpanjangan.


2103
2017-11-20 05:52



Sementara versi Windows yang lebih baru memiliki where perintah, Anda juga dapat melakukan ini dengan Windows XP dengan menggunakan pengubah variabel lingkungan, sebagai berikut:

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

Anda tidak memerlukan alat tambahan 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 ingin satu yang dapat menangani semua ekstensi di PATHEXT (seperti Windows itu sendiri), yang satu ini caranya:

@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

Ini benar-benar mengembalikan semua kemungkinan tetapi Anda dapat men-tweaknya dengan mudah untuk aturan pencarian tertentu.


256
2017-11-20 05:48



Di bawah PowerShell get-command akan menemukan file yang dapat dieksekusi di mana saja di $Env:PATH.

get-command eventvwr

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

Ini juga menemukan cmdlet powershell, fungsi, alias, file dengan ekstensi executable kustom melalui $Env:PATHEXT, dll didefinisikan untuk shell saat ini (cukup mirip dengan bash type -a foo) - menjadikannya lebih baik daripada alat lain seperti where.exe, which.exe, dll yang tidak mengetahui perintah PowerShell ini.

Anda dapat dengan cepat mengatur alias dengan sal which gcm (bentuk singkat set-alias which get-command).


105
2017-11-26 02:07



Di jendela PowerShell:

set-alias which where.exe

39
2017-11-30 23:00



Jika Anda memasang PowerShell (yang saya sarankan), Anda dapat menggunakan perintah berikut sebagai ekuivalen kasar (pengganti programName untuk nama executable Anda):

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

Lebih lanjut di sini: http://www.codeassassin.com/blog/PermaLink,guid,fd1967d1-f844-4e29-82e2-f2d6424b4ef9.aspx


37
2017-11-20 05:16



Itu GnuWin32 alat punya which, bersama dengan seluruh alat Unix lainnya.


31
2017-11-20 06:44



Di Windows CMD which panggilan where:

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

19
2018-04-01 12:02