如何在不同目录下的批处理文件中启动另一个批处理文件中的exe文件?

3
我将尝试解释我的问题:
  • 我有一个主批处理文件,名为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\”而不是“D:\Master\Slave\"启动setup_01.exe。
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

有没有一种方法可以在从master.bat文件启动的slave_0x.bat文件中使用当前目录,而不是从master.bat文件的当前目录来启动正确目录下的setup_0x.exe文件?

谢谢!

1个回答

4

如果要启动不在同一目录中的可执行文件,需要在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时常见的问题。请参阅如何在Windows中使用带有空格路径和命令的"start"创建批处理文件


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接