如何从不同目录中的其他批处理文件中的批处理文件中启动exe文件?

时间:2016-07-29 17:12:27

标签: windows batch-file call

我会尝试解释我的问题:

  • 我有一个名为master.bat
  • 的主批处理文件
  • 我有几个批处理文件,名为slave_0x.bat,使用CALL命令从master.bat调用。
  • 每个slave_0x.bat文件从相对目录启动setup_0x.exe文件。
  • 这两个文件位于master.bat目录的子目录中。

每个例子:

  • master.bat文件位于D:\ Master \
  • slave_01.bat位于D:\ Master \ Slave_01 \
  • setup_01.exe也位于D:\ Master \ Slave_01 \

问题是:

当我启动master.bat时,当前路径是" D:\ Master \" 然后,当slave_01.bat执行时,它尝试从" D:\ Master \"启动setup_01.exe。而不是来自" 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文件:

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

有没有办法使用slave_0x.bat文件中的当前目录而不是slave_0x.bat中master.bat文件的当前目录来从正确的目录启动setup_0x.exe文件?

此致

1 个答案:

答案 0 :(得分:3)

要启动位于其他目录中的可执行文件,请添加START命令的相对路径。使用%~dp0获取当前正在运行的批处理文件的路径。

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

这将启动可执行文件,但它不会更改进程当前目录。

如果您的可执行文件依赖于当前目录,那么您首先需要cd到该目录。临时更改目录的最简单方法是pushdpopd

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

注意:如果路径或可执行文件名称可以包含空格,请将可执行文件名称放在引号中,如下所示(包括必需的虚拟引号)

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

这是使用批处理START命令的常见问题。见How to create batch file in Windows using "start" with a path and command with spaces