Can someone please explain what's the difference between
call someBatchFile.bat ...
And
cmd /C someBatchFile.bat ...
They both were suggested to me as solutions to this problem, but I don't understand why they both work, and more importantly, if there are any significant differences I must be aware of.
The difference is that
call
execute the other Batch file in the same context of the caller program, so they share the same environment variables and other status (likeecho ON/OFF
or delayed expansion), whereascmd /C
execute the other Batch file in an entirely separated context, so any change made in the called Batch file is not reflected in the original file.Just as a personal note, I used to name internal subroutine the Batch file invoked via
call
, and external subroutine the one invoked viacmd /C
(and overlay the Batch file directly invoked withoutcall
norcmd /C
, that inherits the behavior and context of the caller Batch file).