Rufen Sie die Batch-Datei auf und führen Sie sie unter einem eigenen Pfad / Verzeichnis aus

12

Ich habe eine Batch-Datei, die andere Batch-Dateien wie folgt aufruft:

e:\foo\master.bat hat den Inhalt:

call e:\bar\run1.bat 

und e:\bar\run1.bathat den Inhalt

app1.exe

Das Problem ist, dass beim Ausführen das master.bat app1.exenicht ausgeführt wird, da erwartet wird, dass es sich im e:\fooVerzeichnis befindet, anstatt dass es sich im e:\barVerzeichnis befindet

Omu
quelle

Antworten:

13

Sie sind sich nicht sicher, wo sich app1.exe befindet.

Wenn der Ordner mit run1.bat geteilt wird, ändern Sie run1.bat

entweder

@Echo off
Pushd "%~dp0"
app1.exe
popd

oder

@Echo off
"%~dp0app1.exe"

%0bezieht sich auf den aktuell ausgeführten Stapel und der Modifikator ~dpgibt Laufwerk und Pfad zurück (mit einem nachgestellten Backslash).

LotPings
quelle
Die PushdMethode funktioniert am besten für mich, da app1.exeintern auch das aktuelle Verzeichnis verwendet wird und bei Verwendung von Pushd das Verzeichnis verwendet wird, in dem app1.exesich das Verzeichnis befindet. Ohne Pushd (jedoch mit dem Präfix) wird der master.batSpeicherort verwendet
Omu
1
In Anbetracht dieser Art von Implikationen war diese Methode absichtlich die erste in meiner Antwort. Danke für die Rückmeldung.
LotPings
4

Die Antwort auf Ihre Frage kann aus einer ähnlichen Frage zum Stapelüberlauf abgeleitet werden.

Was ist das aktuelle Verzeichnis in einer Batchdatei?

Mit den hier genannten Variablen können Sie run1.bat aktualisieren, um app1.exe mit der folgenden Zeile aufzurufen : %~dp0app1.exe. (Die Variable% ~ dp0 enthält einen abschließenden Schrägstrich.) Dadurch wird die Batchdatei angewiesen, die ausführbare Datei vom Speicherort der aktuellen Batchdatei aus auszuführen.

RobusteErde
quelle