problemsolver
Goto Top

Vergleichbares Programm für which (Linux) unter Windows gesucht!

"which" <Programmname> -> Linux; "???" <Programmname> ->Windows

Hallo zusammen,

Gibt es ein Programm unter Windows, dass mir die gleiche Funktionalität wie das Tool which bei Linux gibt?
Ich möchte gerne von meiner Kommandozeile aus in Erfahrung bringen, in welchem Pfad sich ein Programm befindet, das ich starte.

Gruß

Markus

Content-Key: 100520

Url: https://administrator.de/contentid/100520

Printed on: April 16, 2024 at 20:04 o'clock

Member: mnbesc
mnbesc Oct 29, 2008 at 12:22:02 (UTC)
Goto Top
siehe

http://www.profsoftware.com/unixdos/

da ist auch which mit dabei.....

gruß
mnbesc
Member: problemsolver
problemsolver Oct 29, 2008 at 12:37:58 (UTC)
Goto Top
Hallo!

Vielen Dank für dein Kommentar!
Du hast mich auf jeden Fall in die richtige Richtung gestoßen!!! face-smile

Eine Suche nasch "Unix Tools for Windows" brachte dann auch kostenlose Software ans Tageslicht. Ich hatte vorher nach "which" gesucht... na nur blöd, dass das Wort im Englischen so oft vorkommt ;)... na die Suche ist halt entscheidend anscheinend gewesen.

Das Programm "which" ist bei den UNXUTILS http://unxutils.sourceforge.net integriert.

Vielen Dank! Problem gelöst!

Gruß

Markus
Member: Biber
Biber Oct 29, 2008 at 12:48:47 (UTC)
Goto Top
Moin problemsolver,

ein "which.bat" könnte beispielsweise so aussehen
@for %%i in ("%~1") do @echo %%~$Path:i  

Demo der Mimik am CMD-Prompt (Eingabezeile erkennbar am ">".)
>for %i in ("findstr.exe") do @echo %~$Path:i
C:\WINDOWS\system32\findstr.exe

Haken an dieser Variante ist, dass leider der vollständige Such-Name angegeben werden muss (Name incl. Extension.
Schöner wäre natürlich ein "whichwild.bat", der sich mit einem Namen als Parameter zufriedengibt.
>which findstr
C:\WINDOWS\system32\findstr.exe
Da ich bisher mit dem ersten Ansatz (Name+Ext) leben konnte, habe ich für Anforderung 2 noch nichts.
Wäre aber machbar.

Grüße
Biber
Member: bastla
bastla Oct 29, 2008 at 13:18:43 (UTC)
Goto Top
@Biber
Genügt da nicht (als Ansatz) ein
@for %%e in (exe com bat cmd pif vbs vbe js) do @for %%i in ("%~1.%%e") do @for /f %%a in ("%%~$Path:i") do @echo %%a  
So viele Typen für ausführbare Dateien gibt's dann ja eigentlich nicht ...

Grüße
bastla
Member: problemsolver
problemsolver Oct 29, 2008 at 15:59:28 (UTC)
Goto Top
Hey Biber!

Absoluter Wahnsinn, Biber!!! *fasziniert-den-kopf-schüttel*
Irgendwann batched Du oder ich mich selber hier noch weg und ich werd dann gekündigt, weil mein Job durch ne Batch-Datei übernommen worden ist *fg*

Na ich glaub mir fehlte einfach das Wissen zu:
%~$Path:i

Obwohl es dick und fett nachzulesen ist unter for /? face-wink

Achja... nochn dickes LOB und DANKE!

Gruß

Markus
Member: Biber
Biber Oct 29, 2008 at 16:06:01 (UTC)
Goto Top
@bastla
wenn ich es brauchen würde, dann würde ich sicher schreiben:
@for %%e in (%pathext%) do @for %%i in ("%~1%%e") do @for /f %%a in ("%%~$Path:i") do @echo %%a  
... damit es in eine kürzere Zeile passt... face-wink

Aber, wie oben geschrieben, eigentlich habe ich es ja noch nie gebraucht.

Grüße
Biber
Member: bastla
bastla Oct 29, 2008 at 16:14:38 (UTC)
Goto Top
@Biber
... damit es in eine kürzere Zeile passt... face-wink
Ja, heutzutage müssen wir alle sparen wo's nur geht ... face-wink

eigentlich habe ich es ja noch nie gebraucht.
... und da selbiges auf mich zutrifft, rein interessehalber die Frage

@problemsolver: Wozu brauchst Du das eigentlich?

Grüße
bastla
Member: problemsolver
problemsolver Oct 29, 2008 at 18:54:56 (UTC)
Goto Top
Hallo B & B face-wink

ganz simple Erklärung eigentlich.
Ich arbeite eigentlich zu -sagen wir mal- 80 % mit der Kommandzeile, da das Wissen, was ich dort anwenden kann, für "fast" alle Windows Versionen gelten und wohl auch in Zukunft gelten werden. (Zumindest die Prinzipien verhalten sich ähnlich...na vielleicht wird es objektorientierter s. PowerShell aber ich will nicht noch weiter ausholen...)
Und als in heute diverse Admintätigkeiten durchgeführt habe und ich immer nach Vereinfachung hierbei suche, hab ich mich gefragt wo sich die DS Tools befinden.
War einfach zu faul nach dsquery, dsadd usw. über die Explorersuchfunktion zu suchen und da hab ich mich an den Unix/Linux Befehl which erinnert.

Naja... als ich dann wieder auf die unxtools aufmerksam wurde (die sich noch auf meiner Platte versteckt hatten), war das schon fast erledigt.... bis ihr gekommen seid ^^

Aber ich find es Klasse, dass ihr mich immer wieder aus den Latschen batcht :-P (und lustig isses obendrein)

Gruß

Markus
P.S.: Eure Lösung ist noch besser wie das which von den unxutil, da es die Dateiendungen relativiert und von sich aus jedes Vorkommnis der gesuchten ausführbaren Datei im Path auflistet.
Member: bastla
bastla Oct 29, 2008 at 19:10:41 (UTC)
Goto Top
Hallo problemsolver!

War einfach zu faul nach dsquery, dsadd usw. über die Explorersuchfunktion zu suchen
Zur Not hätte es auch ein
dir /s /b C:\dsquery.exe
tun können ...

Grüße
bastla
Member: Biber
Biber Oct 29, 2008 at 20:03:08 (UTC)
Goto Top
Moin problemmarkus, face-wink
jedes Vorkommnis der gesuchten ausführbaren Datei im Path auflistet.
Aber kein Oneliner ohne Wermutstropfen:
Im Unterschied zu den Unix-which-en zeigen die Oneliner oben wirklich nur die gefundenen ausführbaren Dateien im Pfad (bzw im %path%) an.
Wenn Du wissen willst, welche Datei zuerst gefunden wird, müsstest Du eigentlich noch prüfen, ob sich eine derartige Datei eventuell im aktuellen Verzeichnis befindet. Denn die würde ja noch eher "gefunden" werden als eine im %path%.
Kleiner Tipp dazu:
Damit im aktuellen Verzeichnis auch gesucht wird (wie unter Unix-which und vom CMD-Interpreter ja auch) ist es das einfachste, das aktuelle Verzeichnis halt mit im Pfad zu hinterlegen.
  • entweder durch Einfügen von ".;" in den Pfad (also Path=.;%Path% )
  • oder dadurch, dass in %PATH% zwei aufeinanderfolgende Semikolons enthalten sind
[GROSSE KLAMMER AUF
Die zweite Variante ist auf Grund der Schlampigkeit der heutigen "Programmierer" ohnehin fast immer gegeben.
Uberprüfung am CMD-Prompt mit;
>for %i in ("%path:;=" "%") do @echo %i
"D:\Oracle\instantclient_10_2\Bin"
"C:\WINDOWS\system32"
"C:\WINDOWS"
"C:\WINDOWS\System32\Wbem"
"C:\PROGRA~1\IBM\SQLLIB\BIN"
"C:\PROGRA~1\IBM\SQLLIB\FUNCTION"
"C:\PROGRA~1\IBM\SQLLIB\SAMPLES\REPL"
"d:\Biber\_1"
""   -----------> hier sind zwei Semikolons hintereinander im Pfad
"D:\Programme\SSH Communications Security\SSH Secure Shell"
"%APPDATA%" -----------> M$-XP-Bug--%APPDATA% wird zu früh in den Pfad geschrieben
----------> und kann nicht aufgelöst werden.
GROSSE KLAMMER ZU]

Diese kleine Anpassung bewirkt, dass auch im aktuellen Pfad gesucht wird.
Beispiel: Suche nach einer ausführbaren Datei "x":
>set path=;;%path%

(=20:59:57  D:\temp=)
>@for %e in (%pathext%) do @for %i in ("x%e") do @for /f %a in ("%~$Path:i") do @echo %a
D:\temp\x.bat
D:\temp\x.vbs

Grüße
Biber