我正在使用installshield,并有一组批处理文件,我想作为安装过程的一部分运行.而不是从installshield执行每个批处理文件,我想创建一个执行所有批处理文件的批处理文件.
我的问题是,调用批处理文件从其他目录中放置两个目录.当批处理文件尝试调用他人,因为找不到他们需要的资源时,它们无法运行.看来,当他们从批处理文件执行两个目录时,由于某些原因使用调用批处理文件的相对路径.我的假设是否正确?
我正在调用的一个批处理文件是一个批处理文件,用于为h2数据库添加星号,调用如下所示:
call h2\bin\h2.bat
如果我在命令提示符下转到/ h2 / bin目录,h2.bat运行正常,但是一旦我从调用批处理文件中运行它,这是我得到的错误.
Error: Could not find or load main class org.h2.tools.Console
说明
It seems that when they are executed from the batch file two
directories up they are for some reason using the relative path of the
calling batch file. Is my assumption correct?
是的,你的假设是正确的.调用批处理文件不会更改当前工作目录.将找到主批处理文件,因为您提供了正确的相对路径,但从目前工作目录的角度而言,不会从包含主批处理文件的目录中看到所有其他相对路径.
%〜dp0是你的朋友,它产生包含该字符序列的批处理文件的驱动器盘符和路径.使用它作为相对路径的基础,您的批处理文件将工作,无论谁从哪里调用它们.
例:
虚拟的h2.bat不行:
@echo off h2.exe start
工作h2.bat:
@echo off "%~dp0\h2.exe" start
有关%〜dp0的更多说明,请参见What does %~dp0 mean,and how does it work?