如何从一个batch file中的另一个batch file从不同的目录启动一个exe文件?

我会尽力解释我的问题:

  • 我有一个主batch file,名为master.bat
  • 我有几个batch file,用CALL命令从master.bat调用slave_0x.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时,当前path是“D:\ Master \”然后,当slave_01.bat被执行时,它会尝试从“D:\ Master \”启动setup_01.exe,而不是从“D:\ Master \奴隶\”

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文件?

问候

要启动位于不同目录中的可执行文件,请将相对路径添加到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命令的常见问题。 请参阅如何使用带有空格的路径和命令的“start”在Windows中创建批处理文件