2808 Stimmen

Gibt es ein Äquivalent zu "which" in der Windows-Befehlszeile?

Da ich manchmal Pfadprobleme habe, bei denen eines meiner eigenen cmd-Skripte von einem anderen Programm (das weiter oben im Pfad liegt) verdeckt (überschattet) wird, würde ich gerne den vollständigen Pfad zu einem Programm in der Windows-Befehlszeile finden können, wenn ich nur seinen Namen angeben kann.

Gibt es eine Entsprechung für den UNIX-Befehl 'which'?

Unter UNIX, which command gibt den vollständigen Pfad des angegebenen Befehls aus, um diese Schattenprobleme leicht zu finden und zu beheben.

0 Stimmen

Was bedeutet "welches" unter Unix?

3 Stimmen

Foredecker: "which" sucht im PATH nach der ausführbaren Datei, die ausgeführt wird, wenn Sie an der Shell-Eingabeaufforderung einen Befehl eingeben.

3 Stimmen

Wenn Sie z.B. 5 Versionen von Java installiert haben und nicht wissen, welche verwendet wird, können Sie "which java" eingeben und Sie erhalten den PATH zum Binary

6voto

Keine der Win32-Portierungen von Unix, die ich im Internet finden konnte, ist zufriedenstellend, da sie alle einen oder mehrere dieser Mängel aufweisen:

  • Keine Unterstützung für die Windows-Variable PATHEXT. (Diese definiert die Liste der Erweiterungen, die implizit zu jedem Befehl hinzugefügt werden, bevor der Pfad gescannt wird, und in welcher Reihenfolge). (Ich verwende viele tcl-Skripte, und kein öffentlich verfügbares Tool kann sie finden).
  • Keine Unterstützung für cmd.exe-Codepages, was dazu führt, dass Pfade mit Nicht-Ascii-Zeichen nicht korrekt angezeigt werden. (Ich bin da sehr empfindlich, mit dem ç in meinem Vornamen :-))
  • Keine Unterstützung für die unterschiedlichen 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 schließlich mein eigenes Programm geschrieben, das alle oben genannten Punkte korrekt unterstützt.

Dort erhältlich: http://jf.larvoire.free.fr/progs/which.exe

0 Stimmen

Zu Ihrer Information: Ich habe mein oben erwähntes Tool which.exe und viele andere auf github.com/JFLarvoire/SysToolsLib . Dort können Sie die neueste Version erhalten, Probleme melden usw.

6voto

Diese Batch-Datei verwendet die CMD-Variable, um den Befehl zu finden, der im Pfad ausgeführt werden soll. Hinweis: Das aktuelle Verzeichnis wird immer vor dem Pfad gesucht, und je nachdem, welcher API-Aufruf verwendet wird, werden auch andere Orte vor/nach dem Pfad durchsucht.

@echo off
echo. 
echo PathFind - Finds the first file in in a path
echo ======== = ===== === ===== ==== == == = ====
echo. 
echo Searching for %1 in %path%
echo. 
set a=%~$PATH:1
If "%a%"=="" (Echo %1 not found) else (echo %1 found at %a%)

Siehe set /? für Hilfe.

6voto

Prayson W. Daniel Punkte 11875

Ich verwende GOW (GNU on Windows), eine Light-Version von Cygwin. Sie können es von GitHub herunterladen aquí .

GOW (GNU on Windows) ist die leichtgewichtige Alternative zu Cygwin. Es verwendet ein bequemes Windows-Installationsprogramm, das etwa 130 extrem nützliche nützliche Open-Source-UNIX-Anwendungen installiert, die als native Win32 Binärdateien. Es ist so konzipiert, dass es so klein wie möglich ist, etwa 10 MB, im im Gegensatz zu Cygwin, das je nach Optionen weit über 100 MB groß sein kann. Optionen. - Über die Beschreibung(Brent R. Matzelle)

Ein Screenshot der Liste der in GOW enthaltenen Befehle:

Enter image description here

5voto

Michał Niklas Punkte 50723

Ich habe ein ähnliches Werkzeug wie Ned Batchelder entwickelt:

Suche nach .dll- und .exe-Dateien im PATH

Während mein Tool in erster Linie für die Suche nach verschiedenen DLL-Versionen gedacht ist, zeigt es mehr Informationen (Datum, Größe, Version), aber es verwendet nicht PATHEXT (ich hoffe, mein Tool bald zu aktualisieren).

5voto

bobbogo Punkte 13969

Ich muss nur noch diese einzeilige Windows-Batchdatei veröffentlichen:

C:>type wh.cmd
@for %%f in (%*) do for %%e in (%PATHEXT% .dll .lnk) do for %%b in (%%f%%e) do for %%d in (%PATH%) do if exist %%d\%%b echo %%d\%%b

Ein Test:

C:>wh ssh
C:\cygwin64\bin\ssh.EXE
C:\Windows\System32\OpenSSH\\ssh.EXE

Nicht ganz ein Einzeiler, wenn Sie den Code in setlocal enableextensions y endlocal .

2 Stimmen

Ich würde das lieber in mehreren Zeilen schreiben, damit ich es verstehen kann ;-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X