Wie kann ich "was" <binary>"in cmd.exe </binary>

5435
René Nyffenegger

Gibt es eine Möglichkeit, schnell festzustellen, wo sich eine Binärdatei (auf die die %PATH%Variable zeigt) befindet.

Das ist etwas, das which perleinem traditionellen Unix-Shell entspricht.

Ich verstehe, dass das Ressourcenkit einen whereBefehl hat, aber dieses Kit ist nicht auf meinem (Unternehmens-) Computer installiert, daher kann ich es nicht verwenden where.

9

2 Antworten auf die Frage

14
MBu

Ein cmd.exe-Einzeiler whichwäre:

for %G in (<binary.exe>) do @echo.%~$PATH:G 

Sie können es als simple which.bat kodieren:

@echo off for %%G in (%1) do @echo.%%~$PATH:G 

BEARBEITEN: erfordert den vollständigen Namen der Binärdatei: which perl.exenicht which perl. Es ist möglich, eine Stapeldatei zu schreiben, die% PATHEXT% berücksichtigt, sodass der vollständige Name der Binärdatei nicht benötigt wird. Bitte lassen Sie mich wissen, wenn Sie es brauchen.

EDIT2: trotzdem habe ich mich entschieden, die Batchdatei zu schreiben. Hier ist es:

@echo off setlocal enabledelayedexpansion  set ext= ;%PATHEXT% :extloop1 for /f "delims=; tokens=1,*" %%A in ("!ext!") do ( if exist %1%%A ( echo .\%1%%A goto finish ) set ext=%%B ) if "!ext!" neq "" goto extloop1  set ext= ;%PATHEXT% :extloop2 for /f "delims=; tokens=1,*" %%A in ("!ext!") do ( for %%C in (%1%%A) do ( if exist %%~$PATH:C ( echo %%~$PATH:C goto finish ) ) set ext=%%B ) if "!ext!" neq "" goto extloop2  :finish endlocal 

Zunächst wird gemäß Bobs Vorschlag geprüft, ob die Binärdatei im aktuellen Verzeichnis vorhanden ist. Wenn die Binärdatei nicht gefunden wird, wird eine andere Schleife ausgeführt, die die Suche durch die Variable% PATH% durchführt.

Schleifen basieren auf if ... goto, der forBefehl wird nur verwendet, um den extWert durch ';' zu teilen. Charakter. Dem Wert von %PATHEXT%wird eine leere Erweiterung vorangestellt, die die Suche nach vollständig benannten Binärdateien ermöglicht - beides which perlund which perl.exefunktioniert.

Nun, wenn Sie am Ende eine erweiterte Batch-Datei schreiben, sollten Sie auch den ganzen Weg gehen und `. \ Binary. *` Zuerst prüfen. [* Das Betriebssystem sucht immer zuerst im aktuellen Verzeichnis, bevor es die Verzeichnisse im Befehlspfad durchsucht. *] (Http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en- us / path.mspx? mfr = true) Bob vor 12 Jahren 1
3
yosh m

Sie können die Sammlung von Dienstprogrammen von Paul Sadowski ausprobieren - er enthält eine which. Siehe es unter: http://www.paulsadowski.com/wsh/cmdprogs.htm