call batch file and run using its own path/directory

I have a batch files that calls other batch files like this:

e:\foo\master.bat has the content:

call e:\bar\run1.bat 

and e:\bar\run1.bat has the content

app1.exe

the problem is that when I run the master.bat app1.exe will not be executed, because it will expect it to be in the e:\foo directory instead of it being in e:\bar directory


Solution 1:

You are a bit unclear where app1.exe is located.

If it shares the folder with run1.bat change run1.bat

to either

@Echo off
Pushd "%~dp0"
app1.exe
popd

or

@Echo off
"%~dp0app1.exe"

%0 refers to the currently running batch and the modifier ~dp returns drive and path (with a trailing backslash.)

Solution 2:

The answer to your question can be drawn from a similar question on Stack Overflow.

What is the current directory in a batch file?

Using the variables mentioned here, you can update run1.bat to call app1.exe with the following line: %~dp0app1.exe. (The %~dp0 variable includes a trailing slash.) This will tell the batch file to run the executable from the current batch file's location.