Vraag Is er een equivalent van 'welke' op de Windows-opdrachtregel?


Omdat ik soms padproblemen heb, waarbij een van mijn eigen cmd-scripts is verborgen (gearceerd) door een ander programma (eerder op het pad), zou ik graag het volledige pad naar een programma op de Windows-opdrachtregel kunnen vinden, gegeven alleen de naam.

Bestaat er een equivalent van het UNIX-commando 'welke'?

Op UNIX, which command print het volledige pad van de gegeven opdracht om deze schaduwproblemen gemakkelijk te vinden en te herstellen.


1896
2017-11-20 04:19


oorsprong


antwoorden:


Windows Server 2003 en later (dat wil zeggen alles na Windows XP 32 bit) bieden de where.exe programma dat wat van wat doet which doet, hoewel het overeenkomt met alle soorten bestanden, niet alleen uitvoerbare opdrachten. (Het komt niet overeen met ingebouwde shell-opdrachten zoals cd.) Het accepteert zelfs jokertekens, dus where nt* vindt alle bestanden in uw %PATH% en huidige map waarvan de namen beginnen nt.

Proberen where /? voor hulp.

Merk op dat Windows PowerShell dit definieert where als een alias voor de Where-Object cmdlet, dus als je wilt where.exe, u moet de volledige naam typen in plaats van de volledige naam weg te laten .exe uitbreiding.


2103
2017-11-20 05:52



Terwijl latere versies van Windows een where opdracht, kunt u dit ook doen met Windows XP door de omgevingsvariabele-modifiers als volgt te gebruiken:

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

U hebt geen extra hulpmiddelen nodig en het is niet beperkt tot PATH omdat je elke omgevingsvariabele (in de pad-indeling, natuurlijk) die je wilt gebruiken, kunt vervangen.


En als u er een wilt die alle extensies in PATHEXT aankan (zoals Windows zelf doet), doet deze het volgende:

@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

Het geeft eigenlijk alle mogelijkheden terug, maar je kunt het vrij gemakkelijk aanpassen voor specifieke zoekregels.


256
2017-11-20 05:48



Onder PowerShell get-command vindt uitvoerbare bestanden overal in $Env:PATH.

get-command eventvwr

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

Het vindt ook powershell-cmdlets, functies, aliassen, bestanden met aangepaste uitvoerbare extensies via $Env:PATHEXT, enz. gedefinieerd voor de huidige shell (nogal verwant aan bash's type -a foo) - waardoor het een betere start is dan andere tools zoals where.exe, which.exe, enz. die niet op de hoogte zijn van deze PowerShell-opdrachten.

Je kunt snel een alias instellen met sal which gcm (korte vorm van set-alias which get-command).


105
2017-11-26 02:07



In windows powershell:

set-alias which where.exe

39
2017-11-30 23:00



Als u PowerShell hebt geïnstalleerd (die ik aanraad), kunt u de volgende opdracht gebruiken als ruw equivalent (vervang de programmAannaam voor de naam van uw uitvoerbare bestand):

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

Meer hier: http://www.codeassassin.com/blog/PermaLink,guid,fd1967d1-f844-4e29-82e2-f2d6424b4ef9.aspx


37
2017-11-20 05:16



De GnuWin32 gereedschappen hebben which, samen met een hele reeks andere Unix-tools.


31
2017-11-20 06:44



In Windows CMD which calls where:

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

19
2018-04-01 12:02



Verbaasd dat niemand heeft genoemd cygwin als een oplossing. Als u het niet erg vindt om een ​​oplossing van derden te gebruiken, dan is cygwin de juiste keuze.

Cygwin biedt u het comfort van * nix in de Windows-omgeving (en u kunt het gebruiken in uw Windows-opdrachtshell of een * nix-shell van uw keuze gebruiken). Het geeft je een hele reeks * nix-commando's (zoals which) voor Windows, en u kunt die map gewoon opnemen in uw PATH.


15
2017-10-12 17:02



In PowerShell is dat zo gcm, dat geformatteerde informatie geeft over andere opdrachten. Als u alleen het pad naar het uitvoerbare bestand wilt ophalen, gebruikt u .Source.

Bijvoorbeeld: gcm git of (gcm git).Source

Tidbits:

  • Beschikbaar voor Windows XP.
  • Beschikbaar sinds PowerShell 1.0.
  • gcm is een alias van Get-Command cmdlet.
  • Zonder parameters worden alle beschikbare opdrachten weergegeven die door de host-shell worden aangeboden.
  • U kunt een aangepaste alias maken met Set-Alias which gcm en gebruik het als: (which git).Source.
  • Officiële documenten: https://technet.microsoft.com/en-us/library/ee176842.aspx

11
2017-09-11 11:32



Haal unxutils hier vandaan: http://sourceforge.net/projects/unxutils/

goud op Windows-platforms, zet alle leuke Unix-hulpprogramma's op een standaard Windows DOS. Gebruik het al jaren.

Het heeft een 'die' inbegrepen. Merk op dat het echter hoofdlettergevoelig is.

NB: om het te installeren ontploffen de zip ergens en voeg ... \ UnxUtils \ usr \ local \ wbin \ toe aan de env-variabele van je systeempad.


8
2018-03-26 00:08



Ik heb een functie in mijn PowerShell-profiel met de naam 'which'

function which {
    get-command $args[0]| format-list
}

Dit is hoe de uitvoer eruit ziet:

PS C:\Users\fez> which python


Name            : python.exe
CommandType     : Application
Definition      : C:\Python27\python.exe
Extension       : .exe
Path            : C:\Python27\python.exe
FileVersionInfo : File:             C:\Python27\python.exe
                  InternalName:
                  OriginalFilename:
                  FileVersion:
                  FileDescription:
                  Product:
                  ProductVersion:
                  Debug:            False
                  Patched:          False
                  PreRelease:       False
                  PrivateBuild:     False
                  SpecialBuild:     False
                  Language:

7
2017-07-31 08:59