user2380468
user2380468

Reputation: 95

Call to .cmd file causes exit from parent .cmd file

I have a .cmd file which calls another .cmd file, as follows

parent.cmd

call "C:\Program Files\Prog1\bin\dostuff.cmd" -abc="def"

After def.cmd has run, the dos window skips to the next line, showing the prompt >

The parent.cmd file has therefore completed execution, according to the command prompt. However, after the call to dostuff.cmd, the parent.cmd file is not complete and has a number of other commands to run.

dostuff.cmd sets a number of environment variables and aliases which are required for the remaining commands in parent.cmd. Therefore it is necessary that dostuff.cmd runs in the same command prompt as parent.cmd.

dostuff.cmd is written by someone else and does all sorts of things which I know nothing of. If I call some other .cmd file of my own devising in the way described above, it executes correctly and then the parent.cmd file continues executing afterwards without any problem.

Therefore something in dostuff.cmd is shutting off the processing of parent.cmd. Any ideas what this could be and how I could stop it/get around it?

Here is the parent.cmd program:

@echo off
:Begin

echo.hello
call "C:\Program Files\Prog1\bin\dostuff.cmd" -abc="def"
echo.goodbye

:End

The output is

C:\Users\cowman\desktop>.\parent.cmd

hello
dostuff.cmd text...blah blah

C:\Users\cowman\desktop>

As you can see, the echo.goodbye code is not called.

Upvotes: 0

Views: 1392

Answers (3)

jeb
jeb

Reputation: 82267

This sounds that doStuff.cmd is exited by a syntax error in the batch file while redirecting stream 2 to nul.

A syntax error stops immediatly all batch instances/call stack, but the command window stays open.

I suppose the name of your batch file isn't doStuff.cmd and also the parameters are more complex than -abc="def".

As you said in the comments, the command works from the command line, but not from your parent batch, I suppose the parameters contains percent signs or carets.

If they contain percent signs, try to quadruple them.
doStuff.cmd "printf("%d",1)"
convert it to
call doStuff.cmd "printf("%%%%d",1)"

When there are carets involved try something like

set "myCaret=^"
call doStuff.cmd "a caret%%myCaret%%"

Upvotes: 1

dethorpe
dethorpe

Reputation: 521

Sounds like dostuff.cmd is exiting for some reason, which will cause the whole cmd.exe to exit.

Does it have a "exit" command anywhere?, can try changing to "exit /B" to just exit the script not cmd.exe

Upvotes: 0

Magoo
Magoo

Reputation: 79983

Without a listing of dostuff.cmd, we're guessing.

My patented guess would be that dostuff.cmd itself invokes cmd. If you were to respond exit to the second prompt, you should then return to the caller (unless dostuff.cmd again invokes cmd.

if the exit response terminates the cmd session and closes the window, then that's a real mystery.

Upvotes: 2

Related Questions