24

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

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

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

call h2\bin\h2.bat

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

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

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

4

6 回答 6

19

解释

似乎当它们从批处理文件执行两个目录时,由于某种原因,它们使用调用批处理文件的相对路径。我的假设正确吗?

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

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

例子:

虚构的 h2.bat 不起作用:

@echo off
h2.exe start

工作 h2.bat:

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

请参阅%~dp0 是什么意思,它是如何工作的?有关更多解释%~dp0

于 2015-01-20T12:26:28.877 回答
10

尝试设置目录:

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

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

于 2013-05-23T17:32:09.113 回答
1

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

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

打开记事本并提供原始 bat 文件路径,然后调用 bat 文件,其名称如下 -

丁:

cd "E:/ABC/FirstJob/main/"

调用 main_run.bat

现在用 .bat 扩展名保存这个文件。

于 2016-12-21T08:49:56.127 回答
0

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

D:
cd "D:/folder/folder2/"
call batFile.bat
于 2016-02-29T09:49:10.383 回答
0

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

“\h2.bat”

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

于 2020-06-05T08:06:39.540 回答
-1

我试过了 :

推送 h2\bin\

调用 h2.bat

=> 没关系。

于 2016-05-26T04:45:24.470 回答