Da ich manchmal Pfadprobleme habe, bei denen eines meiner eigenen cmd-Skripte von einem anderen Programm (früher auf dem Pfad) ausgeblendet (beschattet) wird, möchte ich in der Windows-Befehlszeile den vollständigen Pfad zu einem Programm finden können nur sein Name.
Gibt es eine Entsprechung zum UNIX-Befehl 'which'?
Gibt unter UNIX which command
den vollständigen Pfad des angegebenen Befehls aus, um diese Schattenprobleme leicht zu finden und zu beheben.
which
In Standard-Unix gibt es keinen Befehl. Das POSIX-Dienstprogramm isttype
. Die C-Shell hat einen which-Befehl, und einige Systeme haben ihn als externe ausführbare Datei. Unter Debian Linuxwhich
stammt es beispielsweise aus einem Paket namensdebutils
. Dieses Externewhich
"sieht" keine Shell-Integrationen, Aliase oder Funktionen.type
tut; Bash'stype
hat die Option, dies zu unterdrücken und einfach eine Pfadsuche durchzuführen.Antworten:
Windows Server 2003 und höher (dh alles nach Windows XP 32 Bit) bietet das
where.exe
Programm, das einige Funktionen ausführtwhich
, obwohl es allen Dateitypen entspricht, nicht nur ausführbaren Befehlen. (Es stimmt nicht mit integrierten Shell-Befehlen wie übereincd
.) Es akzeptiert sogar Platzhalter, sodasswhere nt*
alle Dateien in Ihrem%PATH%
und dem aktuellen Verzeichnis gefunden werden, deren Namen mit beginnennt
.Versuchen Sie
where /?
um Hilfe.Beachten Sie, dass Windows PowerShell
where
als Alias für dasWhere-Object
Cmdlet definiert wird. Wenn Sie möchtenwhere.exe
, müssen Sie den vollständigen Namen eingeben , anstatt die.exe
Erweiterung wegzulassen .quelle
where.exe
Sie daran, dass dies keine eingebaute Shell ist, die Sie%windir%\system32
auf Ihrem Computer haben müssen%PATH%
- was möglicherweise nicht der Fall ist, da die Verwendungwhere
darauf hindeutet, dass Sie möglicherweise an Problemen mit Ihrem Pfad arbeiten!Während spätere Windows-Versionen über einen
where
Befehl verfügen , können Sie dies auch unter Windows XP mithilfe der folgenden Modifikatoren für Umgebungsvariablen tun:Sie benötigen keine zusätzlichen Tools und sind nicht darauf beschränkt,
PATH
da Sie jede Umgebungsvariable (natürlich im Pfadformat) ersetzen können, die Sie verwenden möchten.Und wenn Sie eine möchten, die alle Erweiterungen in PATHEXT verarbeiten kann (wie Windows selbst), dann macht diese den Trick:
Es gibt tatsächlich alle Möglichkeiten zurück, aber Sie können es ganz einfach für bestimmte Suchregeln anpassen.
quelle
which
in W95 / DOS-Tagen ein Zurück codiert habe, war die Suchreihenfolge - aktuelles Verzeichnis, dann jedes Pfadverzeichnis für cmd.com, dann cmd.exe, dann cmd.bat. Also ist sogar cmd.bat im aktuellen Verzeichnis befroe befroe cmd.exe soemwhere in path@echo off for %%i in (%1) do @echo. %%~$PATH:%i
Um sie einem alias.bat-Skript hinzuzufügen, das Sie bei jeder Ausführung von cmd.exe laden (legen Sie das obige Skript in einem neuen Verzeichnis mit dem Namen C: \ usr ab \ aliases):DOSKEY which=C:\usr\aliases\which.bat $*
Dann können Sie ein Skript erstellen, um cmd.exe mit der Datei alias.bat zu starten:cmd.exe /K E:\usr\aliases\alias.bat
Unter PowerShell
Get-Command
finden Sie ausführbare Dateien überall in$Env:PATH
.Es findet auch Powershell - Cmdlets, Funktionen, Aliase, Dateien mit benutzerdefinierten ausführbaren Erweiterungen über
$Env:PATHEXT
usw. für die aktuelle Shell definiert (ganz ähnlich Bashtype -a foo
) - so dass es eine bessere gehen zu als andere Werkzeuge wiewhere.exe
,which.exe
usw , die von ihnen nicht bewusst sind , PowerShell-Befehle.Suchen von ausführbaren Dateien, die nur einen Teil des Namens verwenden
Benutzerdefinierte ausführbare Dateien suchen
Um andere ausführbare Dateien zu finden, die nicht von Windows stammen (Python, Ruby, Perl usw.), müssen der
PATHEXT
Umgebungsvariablen (standardmäßig.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
) Dateierweiterungen für diese ausführbaren Dateien hinzugefügt werden , um Dateien mit diesen Erweiterungen in derPATH
ausführbaren Datei zu identifizieren . DaGet-Command
diese Variable ebenfalls berücksichtigt wird, kann sie erweitert werden, um benutzerdefinierte ausführbare Dateien aufzulisten. z.BSie können schnell einen Alias mit
sal which gcm
(Kurzform vonset-alias which get-command
) einrichten .Weitere Informationen und Beispiele finden Sie in der Online-Hilfe für
Get-Command
.quelle
.BAT
,.CMD
usw.), werden sie ausführbar angesehen , weil ihre Erweiterungen in der genannten sindPATHEXT
variabel (standardmäßig istPATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
). Andere ausführbare Typen (zB.py
,.rb
usw.) kann durch Hinzufügen der Dateierweiterung in und Erstellen eine ausführbare Assoziation mit hinzugefügt werdenassoc
/ftype
z - docs.python.org/3.3/using/...In Windows PowerShell:
quelle
Wenn Sie PowerShell installiert haben (was ich empfehle), können Sie den folgenden Befehl als grobe Entsprechung verwenden (ersetzen Sie den Namen Ihrer ausführbaren Datei durch programName):
Mehr ist hier: Mein Manwich! PowerShell Welche
quelle
($Env:Path).Split(";") | Get-ChildItem -filter programName*
ist so einfach zu tippen ... ;-)Die GnuWin32- Tools haben
which
zusammen mit einer ganzen Reihe anderer Unix-Tools.quelle
In Windows CMD-
which
Aufrufenwhere
:quelle
Cygwin ist eine Lösung. Wenn es Ihnen nichts ausmacht, eine Lösung von Drittanbietern zu verwenden, 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 oder in einer * 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 Ihr Verzeichnis aufnehmenPATH
.quelle
In PowerShell
gcm
gibt es formatierte Informationen zu anderen Befehlen. Wenn Sie nur den Pfad zur ausführbaren Datei abrufen möchten, verwenden Sie.Source
.Zum Beispiel:
gcm git
oder(gcm git).Source
Leckerbissen:
gcm
ist ein Alias vonGet-Command
Cmdlet .Set-Alias which gcm
und wie folgt verwenden :(which git).Source
.quelle
Ich habe eine Funktion in meinem PowerShell-Profil mit dem Namen "welche".
So sieht die Ausgabe aus:
quelle
> get-command app.exe | format-list
funktioniert , aber perfekt!Holen Sie sich Unxutils von hier: http://sourceforge.net/projects/unxutils/
Gold auf Windows-Plattformen, bringt alle netten Unix-Dienstprogramme auf ein Standard-Windows-DOS. Ich benutze es seit Jahren.
Es hat ein "was" enthalten. Beachten Sie jedoch, dass zwischen Groß- und Kleinschreibung unterschieden wird.
NB: Um es zu installieren, explodieren Sie die Zip-Datei und fügen Sie ... \ UnxUtils \ usr \ local \ wbin \ zu Ihrer Systempfad-Umgebungsvariablen hinzu.
quelle
.
für das \ r eingeben. Es ist jedoch eine 99% ige Lösung!Nicht auf Lager von Windows , aber es wird bereitgestellt durch Service für Unix und es gibt einige einfache Batch - Skripten im Umlauf , die die gleiche Sache so dies zu erreichen dies ein .
quelle
Wenn Sie einen kostenlosen Pascal-Compiler finden, können Sie diesen kompilieren. Zumindest funktioniert es und zeigt den notwendigen Algorithmus.
quelle
my_funk;
ist nicht erforderlich. Vielen Dank für die Veröffentlichung eines Pascal-Programms, erinnert mich an meine Jugend! Es ist so schade, dass sich Pascal nicht weiterentwickelt hat.Die beste Version davon, die ich unter Windows gefunden habe, ist Joseph Newcomers "whereis" -Dienstprogramm, das (mit Quelle) auf seiner Website verfügbar ist .
Der Artikel über die Entwicklung von "whereis" ist lesenswert.
quelle
Sie können Git zuerst über das Herunterladen von Git installieren , dann Git Bash öffnen und Folgendes eingeben:
quelle
Keiner der Win32-Ports von Unix, die ich im Internet finden konnte, ist zufriedenstellend, da alle einen oder mehrere dieser Mängel aufweisen:
Also schrieb ich schließlich meine eigene, die alle oben genannten richtig unterstützt.
Dort verfügbar: http://jf.larvoire.free.fr/progs/which.exe
quelle
Diese Batchdatei verwendet die CMD-Variablenbehandlung, um den Befehl zu finden, der im Pfad ausgeführt werden würde. Hinweis: Das aktuelle Verzeichnis wird immer vor dem Pfad erstellt. Je nachdem, welcher API-Aufruf verwendet wird, werden andere Speicherorte vor / nach dem Pfad durchsucht.
Siehe
set /?
für Hilfe.quelle
Ich verwende GOW (GNU unter Windows), eine leichte Version von Cygwin. Sie können es hier von GitHub herunterladen .
Ein Screenshot einer Liste der in GOW enthaltenen Befehle:
quelle
Ich habe ein ähnliches Tool wie Ned Batchelder erstellt:
Durchsuchen von DLL- und EXE-Dateien in PATH
Während mein Tool hauptsächlich für die Suche nach verschiedenen DLL-Versionen vorgesehen ist, werden weitere Informationen (Datum, Größe, Version) angezeigt, es wird jedoch kein PATHEXT verwendet (ich hoffe, mein Tool bald zu aktualisieren).
quelle
Sie müssen nur die One-Liner-Batch-Datei von Windows veröffentlichen:
Ein Test:
Kein Einzeiler, wenn Sie den Code in
setlocal enableextensions
und einschließenendlocal
.quelle
Für Sie Windows XP-Benutzer (die keinen
where
Befehl eingebaut haben) habe ich einen "where like" -Befehl als Rubygem namens geschriebenwhichr
.Installieren Sie Ruby, um es zu installieren.
Dann
Führen Sie es wie folgt aus:
C:> whichr cmd_here
quelle
TCC und TCC / LE von JPSoft sind CMD.EXE-Ersetzungen, die wichtige Funktionen hinzufügen. Relevant für die Frage des OP
which
ist ein eingebauter Befehl für Befehlsprozessoren der TCC-Familie.quelle
Ich habe das
which
Modul von npm schon eine ganze Weile benutzt und es funktioniert sehr gut: https://www.npmjs.com/package/which Es ist eine großartige Alternative für mehrere Plattformen.Jetzt bin ich zu dem gewechselt, der
which
mit Git kommt. Fügen Sie Ihrem Pfad einfach den/usr/bin
Pfad von Git hinzu, der sich normalerweise in befindetC:\Program Files\Git\usr\bin\which.exe
. Diewhich
Binärdatei wird bei seinC:\Program Files\Git\usr\bin\which.exe
. Es ist schneller und funktioniert auch wie erwartet.quelle
Versuche dies
quelle