Вероятно, самый пуленепробиваемый способ сделать это - записать .bat во временный файл, а затем запустить этот временный файл.
cmd.exe, по моему опыту, довольно привередливый и может вести себя по-разному в разных контекстах. Если вы хотите, чтобы он вел себя так же, как файл .bat, который вы запускаете из файловой системы, то вам следует запустить файл .bat из вашей файловой системы.
Вы можете попробовать (но я бы не рекомендовал) передавать команды в экземпляр cmd.exe, но, как я уже сказал, вы можете получить другое поведение.