Ponieważ czasami mam problemy ze ścieżką, gdzie jeden z moich własnych skryptów cmd jest ukryty (zacieniony) przez inny program (wcześniej na ścieżce), chciałbym móc znaleźć pełną ścieżkę do programu w wierszu poleceń systemu Windows, biorąc pod uwagę tylko jego nazwa.
Czy istnieje odpowiednik polecenia UNIX „który”?
W systemie UNIX which command
drukuje pełną ścieżkę danego polecenia, aby łatwo znaleźć i naprawić problemy z zacieniowaniem.
which
standardowym Uniksie nie ma polecenia. Narzędzie POSIX totype
. Powłoka C ma komendę what, a niektóre systemy mają ją jako zewnętrzny plik wykonywalny. Na przykład w systemie Debian Linuxwhich
pochodzi z pakietu o nazwiedebutils
. To zewnętrznewhich
nie „widzi” wbudowanych powłok, aliasów ani funkcji powłoki.type
robi; Bashtype
ma opcję, aby to ukryć i po prostu wyszukać ścieżkę.Odpowiedzi:
Windows Server 2003 i nowsze wersje (tj. Cokolwiek po 32-bitowym systemie Windows XP) zapewniają
where.exe
program, który wykonuje niektóre czynnościwhich
, chociaż pasuje do wszystkich typów plików, a nie tylko poleceń wykonywalnych. (Nie pasuje do wbudowanych poleceń powłoki, takich jakcd
.) Przyjmie nawet symbole wieloznaczne, więcwhere nt*
znajdzie wszystkie pliki w twoim%PATH%
i bieżącym katalogu, których nazwy zaczynają sięnt
.Spróbuj
where /?
uzyskać pomoc.Zauważ, że Windows PowerShell definiuje się
where
jako alias poleceniaWhere-Object
cmdlet , więc jeśli chceszwhere.exe
, musisz wpisać pełną nazwę zamiast pomijać.exe
rozszerzenie.źródło
where.exe
nie jest wbudowane powłoki, trzeba mieć%windir%\system32
na własną%PATH%
- co nie może być przypadek, jak użyciewhere
sugeruje, że można pracować na problemy ze swojej drodze!Podczas gdy nowsze wersje systemu Windows mają
where
polecenie, możesz to również zrobić w systemie Windows XP, używając modyfikatorów zmiennych środowiskowych w następujący sposób:Nie potrzebujesz żadnych dodatkowych narzędzi i nie jest to ograniczone,
PATH
ponieważ możesz zastąpić dowolną zmienną środowiskową (oczywiście w formacie ścieżki), której chcesz użyć.A jeśli chcesz taki, który może obsłużyć wszystkie rozszerzenia PATHEXT (podobnie jak sam system Windows), ten rozwiązuje problem:
W rzeczywistości zwraca wszystkie możliwości, ale można je dość łatwo dostosować do określonych reguł wyszukiwania.
źródło
which
powrotem w dniach W95 / DOS, zgodnie z kolejnością wyszukiwania - bieżący katalog, następnie każdy katalog ścieżki dla cmd.com, następnie cmd.exe, a następnie cmd.bat Tak więc nawet cmd.bat w bieżącym katalogu jest wykonał befroe cmd.exe soemwhere in path@echo off for %%i in (%1) do @echo. %%~$PATH:%i
Aby dodać go do skryptu alias.bat, który ładujesz przy każdym uruchomieniu cmd.exe (umieść powyższy skrypt w nowym katalogu o nazwie C: \ usr \ aliases):DOSKEY which=C:\usr\aliases\which.bat $*
Następnie możesz utworzyć skrypt, aby uruchomić cmd.exe z plikiem alias.bat:cmd.exe /K E:\usr\aliases\alias.bat
W PowerShell
Get-Command
znajdziesz pliki wykonywalne w dowolnym miejscu$Env:PATH
.Stwierdza ponadto cmdlets PowerShell, funkcje, aliasy, plików z niestandardowych wykonywalne rozszerzeniami pośrednictwem
$Env:PATHEXT
itp zdefiniowanych dla bieżącej powłoki (bardzo podobny do atakujących użytkownikatype -a foo
) - dzięki czemu jest lepiej iść do niż inne narzędzia, takie jakwhere.exe
,which.exe
itp, które nie są świadomi tych Polecenia PowerShell.Znajdowanie plików wykonywalnych przy użyciu tylko części nazwy
Znajdowanie niestandardowych plików wykonywalnych
Aby znaleźć inne pliki wykonywalne inne niż Windows (python, ruby, perl itp.), Rozszerzenia plików tych plików wykonywalnych należy dodać do
PATHEXT
zmiennej środowiskowej (domyślnie.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
), aby zidentyfikować pliki z tymi rozszerzeniamiPATH
jako pliki wykonywalne. PonieważGet-Command
również honoruje tę zmienną, można ją rozszerzyć o listę niestandardowych plików wykonywalnych. na przykładMożesz szybko skonfigurować alias za pomocą
sal which gcm
(krótka formaset-alias which get-command
).Więcej informacji i przykładów można znaleźć w pomocy online dla
Get-Command
.źródło
.BAT
,.CMD
itp.), Są one uważane za wykonywalne, ponieważ ich rozszerzenia są nazwane wPATHEXT
zmiennej (która domyślnie jestPATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
). Inne rodzaje wykonywalne (na przykład.py
,.rb
itd) mogą być dodawane przez dodanie rozszerzenie i utworzenia powiązania wykonywalnyassoc
/ftype
- np docs.python.org/3.3/using/...W Windows PowerShell:
źródło
Jeśli masz zainstalowany program PowerShell (który polecam), możesz użyć następującego polecenia jako przybliżonego odpowiednika (zamień nazwę programu na nazwę pliku wykonywalnego):
Więcej jest tutaj: My Manwich! PowerShell Które
źródło
($Env:Path).Split(";") | Get-ChildItem -filter programName*
tak łatwo jest pisać ... ;-)W GnuWin32 narzędzia mają
which
, wraz z całym zabił innych narzędzi Unix.źródło
W
which
połączeniach CMD systemu Windowswhere
:źródło
Cygwin to rozwiązanie. Jeśli nie masz nic przeciwko korzystaniu z rozwiązań innych firm, to Cygwin jest najlepszym rozwiązaniem.
Cygwin zapewnia komfort * nix w środowisku Windows (i możesz go użyć w powłoce poleceń systemu Windows lub użyć wybranej powłoki * nix). Daje ci całą masę poleceń * nix (jak
which
) dla systemu Windows, i możesz po prostu dołączyć ten katalog do swojegoPATH
.źródło
W PowerShell jest
gcm
to sformatowana informacja o innych poleceniach. Jeśli chcesz pobrać tylko ścieżkę do pliku wykonywalnego, użyj.Source
.Na przykład:
gcm git
lub(gcm git).Source
Ciekawostki:
gcm
jest aliasem poleceniaGet-Command
cmdlet .Set-Alias which gcm
i używać go tak:(which git).Source
.źródło
Mam funkcję w moim profilu programu PowerShell o nazwie „która”
Oto jak wygląda wyjście:
źródło
> get-command app.exe | format-list
działało idealnie!Idź dostać unxutils stąd: http://sourceforge.net/projects/unxutils/
złoto na platformach Windows, umieszcza wszystkie ładne narzędzia unixowe na standardowym Windows DOS. Używam go od lat.
Zawiera „co” zawarte. Pamiętaj jednak, że wielkość liter ma znaczenie.
Uwaga: aby go zainstalować, gdzieś rozpakuj zip i dodaj ... \ UnxUtils \ usr \ local \ wbin \ do zmiennej env ścieżki systemowej.
źródło
.
dla \ r. To na pewno 99% rozwiązanie!Nie ma w magazynie systemu Windows, ale jest on zapewniany przez Services for Unix i istnieje kilka prostych skryptów wsadowych, które osiągają to samo, co ten .
źródło
Jeśli możesz znaleźć darmowy kompilator Pascal, możesz go skompilować. Przynajmniej działa i pokazuje niezbędny algorytm.
źródło
my_funk;
jest niepotrzebna. Dzięki za opublikowanie programu Pascal, przypomina mi o mojej młodości! Szkoda, że Pascal nie ewoluował.Najlepszą wersją tego, jaką znalazłem w systemie Windows, jest narzędzie „whereis” Josepha Newcomera, które jest dostępne (wraz ze źródłem) z jego strony .
Warto przeczytać artykuł o rozwoju „whereis”.
źródło
Możesz najpierw zainstalować Git z Downloading Git , a następnie otworzyć Git Bash i wpisać:
źródło
Żaden z portów Win32 systemu Unix, który mogłem znaleźć w Internecie, nie jest zadowalający, ponieważ wszystkie mają jedną lub więcej z tych wad:
Więc w końcu napisałem własny, który poprawnie obsługuje wszystkie powyższe.
Dostępne tam: http://jf.larvoire.free.fr/progs/which.exe
źródło
Ten plik wsadowy używa obsługi zmiennych CMD w celu znalezienia polecenia, które zostanie wykonane na ścieżce. Uwaga: bieżący katalog jest zawsze wykonywany przed ścieżką) i zależnie od tego, które wywołanie API jest używane, inne lokalizacje są przeszukiwane przed / po ścieżce.
Zobacz
set /?
po pomoc.źródło
Używam GOW (GNU na Windows), który jest lekką wersją Cygwin. Możesz pobrać go z GitHub tutaj .
Zrzut ekranu z listą poleceń zawartych w GOW:
źródło
Stworzyłem narzędzie podobne do Neda Batcheldera:
Wyszukiwanie plików .dll i .exe w ŚCIEŻCE
Chociaż moje narzędzie służy przede wszystkim do wyszukiwania różnych wersji dll, wyświetla więcej informacji (data, rozmiar, wersja), ale nie używa PATHEXT (mam nadzieję, że wkrótce zaktualizuję swoje narzędzie).
źródło
Wystarczy opublikować jeden plik wsadowy tego systemu Windows:
Badanie:
Niezupełnie jednowierszowy, jeśli zawijasz kod w
setlocal enableextensions
iendlocal
.źródło
Dla was użytkowników systemu Windows XP (którzy nie mają
where
wbudowanego polecenia), napisałem polecenie „gdzie jak” jako rubygem o nazwiewhichr
.Aby go zainstalować, zainstaluj Ruby.
Następnie
Uruchom to jak:
C:> whichr cmd_here
źródło
TCC i TCC / LE z JPSoft są zamiennikami CMD.EXE, które dodają znaczną funkcjonalność. Istotne dla pytania OP
which
jest wbudowane polecenie dla procesorów poleceń rodziny TCC.źródło
Użyłem
which
moduł z KMP przez jakiś czas, i to działa bardzo dobrze: https://www.npmjs.com/package/which Jest to świetna alternatywa wielu platform.Teraz przełączyłem się na ten,
which
który jest dostarczany z Git. Po prostu dodaj do swojej ścieżki/usr/bin
ścieżkę z Git, która zwykle znajduje się wC:\Program Files\Git\usr\bin\which.exe
. Plikwhich
binarny będzie naC:\Program Files\Git\usr\bin\which.exe
. Jest szybszy i działa również zgodnie z oczekiwaniami.źródło
Spróbuj tego
źródło