command-line linux command - Gibt es in der Windows-Befehlszeile ein Äquivalent zu "which"?
Während neuere Versionen von Windows einen where
Befehl haben, können Sie dies auch mit Windows XP tun, indem Sie die Modifizierer für Umgebungsvariablen wie folgt verwenden:
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
Sie benötigen keine zusätzlichen Tools und sind nicht auf PATH
beschränkt, da Sie jede Umgebungsvariable (natürlich im Pfadformat), die Sie verwenden möchten, ersetzen können.
Und wenn Sie einen haben wollen, der alle Erweiterungen in PATHEXT handhaben kann (wie Windows selbst), macht dieser den Trick:
@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
Es gibt tatsächlich alle Möglichkeiten zurück, aber Sie können es sehr leicht für bestimmte Suchregeln zwicken.
Da ich manchmal Pfadprobleme habe, wo eines meiner eigenen cmd-Skripte von einem anderen Programm (früher auf dem Pfad) versteckt (shadowed) wird, würde ich gerne in der Lage sein, den vollständigen Pfad zu einem Programm in der Windows-Befehlszeile zu finden nur sein Name.
Gibt es ein Äquivalent zum UNIX-Befehl 'which'?
Unter UNIX gibt which command
den vollständigen Pfad des angegebenen Befehls aus, um diese Schattenprobleme einfach zu finden und zu reparieren.
In Windows-Powershell:
set-alias which where.exe
Die GnuWin32 Tools haben, zusammen mit einer ganzen Reihe anderer Unix-Tools.
Überrascht, dass niemand Cygwin als Lösung erwähnt hat. Wenn es Ihnen nichts ausmacht, eine Lösung von Drittanbietern zu verwenden, dann ist Cygwin der richtige Weg.
Cygwin bietet Ihnen den Komfort von * nix in der Windows-Umgebung (und Sie können es in Ihrer Windows-Befehlsshell verwenden oder eine * nix-Shell Ihrer Wahl verwenden). Es gibt Ihnen eine ganze Reihe von * nix-Befehlen (wie which
) für Windows, und Sie können dieses Verzeichnis einfach in Ihren PATH
.
Holen Sie sich Unexuelle von hier: http://sourceforge.net/projects/unxutils/
Gold auf Windows-Plattformen, setzt alle netten Unix-Utilities auf ein Standard-Windows-DOS. Benutze es seit Jahren.
Es hat ein "was" beinhaltet. Beachten Sie, dass es Groß- und Kleinschreibung ist.
NB: Um es zu installieren, explodieren Sie die Zip irgendwo und fügen Sie ... \ UnxUtils \ usr \ local \ wbin \ zu Ihrer Systempfad-env-Variable hinzu.
Nicht auf Lager Windows, aber es wird von Services für Unix zur Verfügung gestellt und es gibt mehrere einfache Batch-Skripte, die das gleiche wie dieses hier erreichen .
Ich habe in meinem PowerShell-Profil eine Funktion namens "which"
function which {
get-command $args[0]| format-list
}
So sieht die Ausgabe aus:
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:
Keiner der Win32-Ports von Unix, die ich im Internet finden konnte, ist satistactory, weil sie alle einen oder mehrere dieser Unzulänglichkeiten haben:
- Keine Unterstützung für Windows PATHEXT-Variable. (Dies definiert die Liste der implizit jedem Befehl hinzugefügten Erweiterungen vor dem Scannen des Pfades und in welcher Reihenfolge.) (Ich benutze viele tcl-Skripte und es ist nicht öffentlich verfügbar, welches Tool sie finden könnte.)
- Keine Unterstützung für cmd.exe-Codepages, wodurch sie Pfade mit nicht-ASCII-Zeichen falsch anzeigen. (Ich bin sehr empfindlich darauf, mit dem ç in meinem Vornamen :-))
- Keine Unterstützung für die verschiedenen Suchregeln in cmd.exe und der PowerShell-Befehlszeile. (Kein öffentlich verfügbares Tool findet .ps1-Skripte in einem PowerShell-Fenster, aber nicht in einem cmd-Fenster!)
Also habe ich irgendwann mein eigenes geschrieben, was das alles oben korrekt unterstützt.
Verfügbar dort: http://jf.larvoire.free.fr/progs/which.exe
Sie können zuerst git von https://git-scm.com/download/win installieren und dann git bash öffnen und tippen
which app-name
Ich verwende GOW (Gnu unter Windows), eine Light-Version von Cygwin. Sie können es von Github here. erfassen here.
Gow (Gnu On Windows) ist die leichte Alternative zu Cygwin. Es verwendet ein praktisches Windows-Installationsprogramm, das ungefähr 130 äußerst nützliche Open-Source-UNIX-Anwendungen installiert, die als native Win32-Binärdateien kompiliert sind. Es ist so klein wie möglich, etwa 10 MB, im Gegensatz zu Cygwin, die je nach Optionen weit über 100 MB laufen kann. - Über Beschreibung (Brent R. Matzelle)
Screenshot einer Liste von Befehlen, die in GOW enthalten sind.