2016-07-29 31 views
3

Ich werde versuchen, mein Problem zu erklären:Wie starte ich eine EXE-Datei aus einer Batch-Datei in einer anderen Batch-Datei aus verschiedenen Verzeichnissen?

  • ich eine Haupt-Batch-Datei namens master.bat
  • ich mehrere Batch-Dateien haben, mit dem Namen slave_0x.bat von master.bat mit dem Befehl CALL aufgerufen.
  • Jede Datei slave_0x.bat startet eine Datei setup_0x.exe aus einem relativen Verzeichnis.
  • Diese beiden Dateien befinden sich in einem Unterverzeichnis aus dem Verzeichnis master.bat.

Per Beispiel:

  • master.bat Datei in D: \ befinden Meister \
  • slave_01.bat in D: \ befinden Meister \ Slave_01 \
  • setup_01.exe ist auch in D: \ Meister \ Slave_01 \

Das Problem ist:

Wenn Ich starte master.bat, der aktuelle Pfad ist "D: \ Master \" Dann, wenn slave_01.bat ausgeführt wird, versuchen Sie, Setup_01.exe von "D: \ Master \" und nicht von "D: \ Master \ Slave \“

REM Master.bat 

@ECHO OFF 
TITLE Installing Applications 

SET mypath=%~dp0 
ECHO %mypath:~0,-1% 

ECHO. 
ECHO 1) Installing App 1 
ECHO. 

call D:\Master\Slave_01\slave_01.bat" 

ECHO. 
ECHO 2) Installing App 2 
ECHO. 

CALL D:\Master\Slave_02\slave_02.bat" 

PAUSE 

slave_0x Dateien:

REM slave_01.bat 

TITLE App 1 

ECHO. 
ECHO %mypath:~0,-1% 
ECHO. 

ECHO Installing App 1 
ECHO Please wait... 

START /wait setup_01.exe /SILENT /SP- /NORESTART 

gibt es eine Möglichkeit, das aktuelle Verzeichnis aus dem slave_0x.bat Datei stattdessen das aktuelle Verzeichnis aus der master.bat Datei im slave_0x zu verwenden. bat, um die Datei setup_0x.exe aus dem richtigen Verzeichnis zu starten?

Grüße

Antwort

3

um eine ausführbare Datei zu starten, die in einem anderen Verzeichnis ist, fügen Sie den relativen Pfad zu dem START Befehl. Verwenden Sie %~dp0, um den Pfad der aktuell ausgeführten Batchdatei abzurufen.

START /wait %~dp0\setup_01.exe /SILENT /SP- /NORESTART 

Dies startet die ausführbare Datei, aber es ändert das aktuelle Prozessverzeichnis nicht.

Wenn Ihre ausführbare Datei auf dem aktuellen Verzeichnis basiert, müssen Sie zuerst cd in dieses Verzeichnis eingeben. Der einfachste Weg, Verzeichnisse vorübergehend zu wechseln, ist pushd und popd.

pushd %~dp0 
START /wait setup_01.exe /SILENT /SP- /NORESTART 
popd 

Hinweis: Wenn der Pfad oder Namen der ausführbaren Datei Leerzeichen enthalten, setzen Sie den Namen der ausführbaren Datei in Anführungszeichen wie folgt (einschließlich der obligatorischen Dummy Anführungszeichen)

START /wait "" "%~dp0\setup_01.exe" /SILENT /SP- /NORESTART 

Dies ist eine gemeinsame Gotcha ist die Verwendung von Batch START Befehl. Siehe How to create batch file in Windows using "start" with a path and command with spaces