Windows-Befehl mit Ordner relativ zu PATH

Windows-Befehl mit Ordner relativ zu PATH

Von der Windows-Befehlszeile aus, wenn ich mich in c:\foo befinde und c:\bar in meinem PATH liegt.
Gibt es eine Möglichkeit, „\bin\myapp.exe“ aufzurufen und meinen Pfad durchsuchen zu lassen, um c:\bar\bin\myapp.exe aufzurufen?
vielleicht ein Präfix/eine Umgebungsvariable oder ein Standarddienstprogramm?

Ich glaube, dass das oben genannte auf einem Macos/Linux-System (?) einwandfrei funktionieren würde und auch unter Windows einwandfrei funktioniert, wenn der Befehl keine Ordnerinformationen enthielte (d. h. c:\bar\bin liegt im Pfad und ich rufe nur myappe.exe auf).

Aktualisieren-Dies ist für ein Skript, das das (Drittanbieter-)Installationsverzeichnis nicht kennt. Es weiß nur, dass sich das Basisverzeichnis im Pfad befindet(und der EXE-Name ist eindeutig genug, dass es unwahrscheinlich ist, dass er mit einer App mit demselben Namen kollidiert). Ich könnte wahrscheinlich ein Skript schreiben, um es zu finden (grep), hoffte aber, dass es einen einfachen Trick gibt (cmd.exe-Option usw.), um den Unterordnernamen im Befehl zuzulassen, ähnlich wie Unix dies zulässt.

Antwort1

LesenBefehlszeilenargumente (Parameter)oder call /?:


If Command Extensions are enabled CALL changes as follows:
In addition, expansion of batch script argument references (%0, %1,
etc.) have been changed as follows:
        %~$PATH:1   -  searches the directories listed in the PATH
                       environment variable and expands %1 to the fully
                       qualified name of the first one found.  If the
                       environment variable name is not defined or the
                       file is not found by the search, then this
                       modifier expands to the empty string

Der FORBefehl erzeugt Parametervariablen, die mit einem Buchstaben statt einer Zahl gekennzeichnet sind (z.B. %%G). Auch auf diese lassen sich die oben beschriebenen Parametererweiterungen anwenden.

Wenden Sie das Obige auf Ihren Fall an (beachten Sie die doppelte Prozentangabe %%gbei Verwendung in einem .batoder einem .cmdSkript):

for %%g in ("bin\myapp.exe") do @set "_pathToMyApp=%%~$PATH:g"
rem         ↑↑  NO leading backslash
rem next line calls `myapp.exe` using its fully qualified name
"%_pathToMyApp%"

Ein echtes Beispiel: (beachten Sie das einzelne Prozentzeichen %gbei der Verwendung aus der Eingabeaufforderung in einem geöffneten cmdFenster). Meine PATHVariable lautet wie folgt, …;C:\Utils\;…ohne weiteren Verweis auf C:\Utilsden Ordner (Basisverzeichnis), myapp.exeist eine einfache Anwendung, die alle bereitgestellten Parameter anzeigt:

d:\bat> myapp.exe
'myapp.exe' is not recognized as an internal or external command,
operable program or batch file.

d:\bat> bin\myapp.exe
The system cannot find the path specified.

d:\bat> set _
Environment variable _ not defined

d:\bat> for %g in ("bin\myapp.exe") do @set "_pathToMyApp=%~$PATH:g"

d:\bat> set _
_pathToMyApp=C:\Utils\bin\myapp.exe

d:\bat> "%_pathToMyApp%" display all parameters
param 0 = C:\Utils\bin\myapp.exe
param 1 = display
param 2 = all
param 3 = parameters

d:\bat>

Antwort2

In Windows können Sie Ihre eigenen Umgebungsvariablen festlegen und diese dann verwenden. Sie könnten also zu folgendem gehen:

  • Bedienfeld
  • System
  • Erweiterte Systemeinstellungen
  • Registerkarte „Erweitert“
  • Umgebungsvariablen

Klicken Sie dann einfach auf „Neu“ und fügen Sie Ihre Variable hinzu. Sie können diese Variable dann in Befehlen verwenden. Sie können also einfach Ihren Pfad festlegen und ihn nach Belieben mit dem Namen verwenden, den Sie ihm geben.

Beispiel:

In Ihrem Fall könnten Sie also die folgende Variable festlegen: appNameBinPath = "C:\bar". Sie könnten sie dann im folgenden Beispiel verwenden:

C:\foo>%appNameBinPath%\bin\myapp.exe 

Wenn Sie alternativ eine permanente Variable per Skript und/oder Befehlszeile festlegen möchten, können Sie diesen Artikel lesen:https://stackoverflow.com/questions/5898131/set-a-persistent-environment-variable-from-cmd-exe

verwandte Informationen