【问题标题】:Calling a batch file from another batch file in different directory - resources not found从不同目录中的另一个批处理文件调用批处理文件 - 找不到资源
【发布时间】:2013-05-23 15:49:23
【问题描述】:

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

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

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

call h2\bin\h2.bat

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

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

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

【问题讨论】:

  • 尝试pushd h2\bin\ 然后call h2.bat

标签: windows batch-file


【解决方案1】:

说明

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

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

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

【讨论】:

  • 路径中有批处理文件怎么办?
【解决方案2】:

尝试设置目录:

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

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

【讨论】:

    【解决方案3】:

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

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

    打开记事本并给出你原来的bat文件路径,然后调用名称如-的bat文件-

    D:

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

    调用 main_run.bat

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

    【讨论】:

      【解决方案4】:

      假设当前 .bat 文件在 C 盘运行,而您想运行 D: 目录下的 .bat 文件,然后在第一个 .bat 写入中运行。

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

      【讨论】:

        【解决方案5】:

        如果你的 bat 文件是正确的,试试下面的 cmd 命令然后回车(在 windows 10 中试过):

        "\h2.bat"

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

        【讨论】:

          【解决方案6】:

          我试过了:

          推送 h2\bin\

          调用 h2.bat

          => 没关系。

          【讨论】:

          • npocmaka 2013 给出了相同的答案,我在这里看不到任何新的解决方案
          猜你喜欢
          • 1970-01-01
          • 2023-03-22
          • 2013-02-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-01-24
          相关资源
          最近更新 更多