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
FOR
Befehl 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 %%g
bei Verwendung in einem .bat
oder einem .cmd
Skript):
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 %g
bei der Verwendung aus der Eingabeaufforderung in einem geöffneten cmd
Fenster). Meine PATH
Variable lautet wie folgt, …;C:\Utils\;…
ohne weiteren Verweis auf C:\Utils
den Ordner (Basisverzeichnis), myapp.exe
ist 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