jon*_*ity 17 windows batch-file
我正在使用installshield并且有一组批处理文件,我想在安装过程中运行它们.我没有从installshield执行每个批处理文件,而是想创建一个执行所有批处理文件的批处理文件.
我遇到的问题是调用批处理文件位于其他目录的两个目录中.当批处理文件尝试调用其他文件时,它们无法运行,因为它们无法找到所需的资源.似乎当它们从批处理文件中执行两个目录时,它们出于某种原因使用调用批处理文件的相对路径.我的假设是否正确?
我调用的批处理文件之一是用于为h2数据库加注星标的批处理文件,调用如下所示:
call h2\bin\h2.bat
Run Code Online (Sandbox Code Playgroud)
如果我在命令提示符下转到/ h2/bin目录,h2.bat运行正常但是一旦我从调用批处理文件运行它,这就是我得到的错误.
错误:无法找到或加载主类org.h2.tools.Console
如何在不使用调用批处理文件路径的情况下从另一个批处理文件调用?
Mat*_*ndl 12
似乎当它们从批处理文件中执行两个目录时,它们出于某种原因使用调用批处理文件的相对路径.我的假设是否正确?
是的,你的假设是正确的.调用批处理文件不会更改当前工作目录.主要的批处理文件会被发现,因为你提供了正确的相对路径,但所有其他的相对路径将会从当前的工作目录的角度来看待,而不是从包含主批处理文件的目录.
%~dp0是你的朋友,它产生驱动器号和包含该字符序列的批处理文件的路径.使用它作为相对路径的基础,无论谁从哪里调用它们,您的批处理文件都将起作用.
虚构的h2.bat不起作用:
@echo off
h2.exe start
Run Code Online (Sandbox Code Playgroud)
工作h2.bat:
@echo off
"%~dp0\h2.exe" start
Run Code Online (Sandbox Code Playgroud)
请参阅%~dp0的含义,以及它是如何工作的?有关的更多解释%~dp0
小智 6
尝试设置目录:
cd ht\bin\
call h2.bat
cd %HOMEPATH%
REM just reset to where ever you were before.
Run Code Online (Sandbox Code Playgroud)
如果这样不起作用,请尝试在路径中使用C://前缀。那可能/可能行不通。祝好运!
| 归档时间: |
|
| 查看次数: |
49343 次 |
| 最近记录: |