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

Windows 从不同目录中的另一个批处理文件调用批处理文件-找不到资源,windows,batch-file,Windows,Batch File,我正在使用installshield,并且有一组批处理文件,我希望在安装过程中运行这些文件。我想创建一个批处理文件来执行所有批处理文件,而不是从installshield中执行每个批处理文件 我遇到的问题是,调用批处理文件的目录比其他目录高出两个。当批处理文件试图调用其他批处理文件时,它们无法运行,因为它们找不到所需的资源。似乎当它们从批处理文件的两个目录执行时,出于某种原因,它们使用调用批处理文件的相对路径。我的假设正确吗 我正在调用的一个批处理文件是启动h2数据库的批处理文件。调用如下所示:

我正在使用installshield,并且有一组批处理文件,我希望在安装过程中运行这些文件。我想创建一个批处理文件来执行所有批处理文件,而不是从installshield中执行每个批处理文件

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

我正在调用的一个批处理文件是启动h2数据库的批处理文件。调用如下所示:

call h2\bin\h2.bat
如果我在命令提示符下转到/h2/bin目录,h2.bat运行良好,但一旦我从调用批处理文件运行它,我就会得到错误

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


如何从另一个批处理文件调用一个批处理文件,而不使用调用批处理文件路径

尝试设置目录:

cd ht\bin\
call h2.bat
cd %HOMEPATH%
REM  just reset to where ever you were before.
如果这不起作用,请尝试在路径中使用C://前缀。那可能/可能不起作用。 祝你好运

解释 似乎当它们从批处理文件执行时 由于某种原因,它们使用的是 调用批处理文件。我的假设正确吗

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

%~dp0
是您的朋友,它将生成包含该字符序列的批处理文件的驱动器号和路径。使用它作为相对路径的基础,无论谁从何处调用批处理文件,批处理文件都将工作

例子: 虚构的h2.bat不起作用:

@echo off
h2.exe start
工作h2.bat:

@echo off
"%~dp0\h2.exe" start

有关
%~dp0

的更多说明,请参阅。假设当前.bat文件正在C驱动器中运行,并且您希望先运行放置在D:目录中的.bat文件,然后再运行在第一个.bat write中

D:
cd "D:/folder/folder2/"
call batFile.bat
我试过:

pushd h2\bin\

呼叫h2.bat


=>没关系。

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

或者创建另一个bat文件来调用您的bat文件并计划该文件。您可以像这样创建bat文件-

打开记事本,给出原始bat文件路径,然后调用bat文件,名称如下-

D:

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

调用main_run.bat


现在以.bat扩展名保存此文件

如果您的bat文件正确,请尝试下面的cmd命令并点击enter(在windows 10中尝试):

“\h2.bat”


e、 g:“C:\Users..\bin\h2.bat”

尝试
pushd h2\bin\
,然后
调用h2.bat
npocmaka 2013给出了相同的答案,我在这里看不到任何新的解决方案如果批处理文件在路径中怎么办?