24
votes

I'm working with installshield and have a group of batch files that I want to run as part of the install process. Instead of executing each batch file from installshield I want to create one batch file that executes all of the batch files.

The issue I have is that the calling batch file sits two directories up from the others. When the batch file tries to call the others they fail to run because they can not find the resources that they need. It seems that when they are executed from the batch file two directories up they are for some reason using the relative path of the calling batch file. Is my assumption correct?

One of the batch files that I am calling is a batch file to star an h2 database the call looks like this:

call h2\bin\h2.bat

If I go to the /h2/bin directory in a command prompt the h2.bat runs fine but once I run it from the calling batch file this is the error that I get.

Error: Could not find or load main class org.h2.tools.Console

How do I call one batch file from another without using the calling batch files path?

6
try pushd h2\bin\ and then call h2.batnpocmaka

6 Answers

18
votes

Explanation

It seems that when they are executed from the batch file two directories up they are for some reason using the relative path of the calling batch file. Is my assumption correct?

Yes your assumption is correct. Calling a batch file will not change the current working directory. The main batch file will be found because you are providing the correct relative path, but all the other relative paths will be seen from the perspective of your current working directory, not from the directory that contains the main batch file.

%~dp0 is your friend, it yields the drive letter and path to the batch file containing that character sequence. Use it as a basis for relative paths and your batch files will work no matter who calls them from where.

Example:

Fictitious h2.bat that won't work:

@echo off
h2.exe start

Working h2.bat:

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

See What does %~dp0 mean, and how does it work? for more explanations on %~dp0

10
votes

Try setting the directory:

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

If that doesn't work, try using the C:// prefix in your path. That might/might not work. Good Luck!

1
votes

It might be because you don't have permission. M facing the same problem and i found the solution like this - Right click on your task than properties. In properties click on General tab and then click on 'User Group or User' and select appropriate user.

Or create a another bat file to call your bat file and schedule that file. you can create the bat file like this -

open Notepad and give your original bat file path and then call bat file with name like -

D:

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

call main_run.bat

Now save this file with .bat extension.

0
votes

Suppose current .bat file is running in C drive and you want to run .bat file placed in D: directory then in first .bat write.

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

if your bat file is correct, try cmd command as below and hit enter(tried in windows 10):

"\h2.bat"

e.g: "C:\Users..\bin\h2.bat"

-1
votes

I tried :

pushd h2\bin\

call h2.bat

=> It 's okay.