如何从不同目录的其他批处理文件中的批处理文件启动 exe 文件?
How to launch an exe file from a Batch file within an other batch file from different directories?
我会尽力解释我的问题:
- 我有一个主批处理文件,名为 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
有没有办法在 slave_0x.bat 中使用 slave_0x.bat 文件中的当前目录而不是 master.bat 文件中的当前目录来启动 setup_0x.exe 文件从正确的目录 ?
此致
要启动不同目录中的可执行文件,请将相对路径添加到 START
命令。使用 %~dp0
获取当前 运行 批处理文件的路径。
START /wait %~dp0\setup_01.exe /SILENT /SP- /NORESTART
这会启动可执行文件,但不会更改进程的当前目录。
如果您的可执行文件依赖于当前目录,那么您需要先 cd
到该目录。临时更改目录的最简单方法是 pushd
和 popd
.
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
我会尽力解释我的问题:
- 我有一个主批处理文件,名为 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.exeREM 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
到该目录。临时更改目录的最简单方法是 pushd
和 popd
.
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