从另一个目录中的另一个批处理文件调用批处理文件 - 找不到资源

时间:2013-05-23 15:49:23

标签: windows batch-file

我正在使用installshield并且有一组批处理文件,我想在安装过程中运行它们。我没有从installshield执行每个批处理文件,而是想创建一个执行所有批处理文件的批处理文件。

我遇到的问题是调用批处理文件与其他目录位于两个目录中。当批处理文件尝试调用其他文件时,它们无法运行,因为它们无法找到所需的资源。似乎当它们从批处理文件中执行两个目录时,它们出于某种原因使用调用批处理文件的相对路径。我的假设是否正确?

我正在调用的批处理文件之一是用于为h2数据库加注星标的批处理文件,调用如下所示:

call h2\bin\h2.bat

如果我在命令提示符下转到/ h2 / bin目录,h2.bat运行正常但是一旦我从调用批处理文件运行它,这就是我得到的错误。

  

错误:无法找到或加载主类org.h2.tools.Console

如何在不使用调用批处理文件路径的情况下从另一个批处理文件调用?

6 个答案:

答案 0 :(得分:11)

说明

  

似乎从批处理文件中执行它们两个   他们出于某种原因使用相对路径的目录   调用批处理文件。我的假设是否正确?

是的,你的假设是正确的。调用批处理文件不会更改当前工作目录。将找到主批处理文件,因为您提供了正确的相对路径,但是从当前工作目录的角度看,所有其他相对路径,而不是包含主批处理文件的目录。

%~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?

答案 1 :(得分:4)

尝试设置目录:

cd ht\bin\
call h2.bat
cd %HOMEPATH%
REM  just reset to where ever you were before.

如果这不起作用,请尝试在路径中使用C://前缀。这可能/可能不起作用。 祝你好运!

答案 2 :(得分:0)

可能是因为您没有权限。 M面临同样的问题,我找到了这样的解决方案 - 右键单击您的任务而不是属性。 在属性中,单击“常规”选项卡,然后单击“用户组或用户”并选择适当的用户。

或者创建另一个bat文件来调用bat文件并安排该文件。你可以像这样创建bat文件 -

打开记事本并提供原始的bat文件路径,然后调用名称为

的bat文件

d

cd“E:/ ABC / FirstJob / main /”

致电main_run.bat

现在使用.bat扩展名保存此文件。

答案 3 :(得分:0)

如果您的bat文件正确,请尝试以下cmd命令,然后按Enter键(在Windows 10中试用):

“ \ h2.bat”

例如:“ C:\ Users .. \ bin \ h2.bat”

答案 4 :(得分:-1)

假设当前的.bat文件在C盘中运行,并且您希望运行放在D:目录中的.bat文件,然后在第一个.bat写入。

D:
cd "D:/folder/folder2/"
call batFile.bat

答案 5 :(得分:-1)

我试过了:

pushd h2 \ bin \

致电h2.bat

=>没关系。

相关问题