Esse é o comportamento idiota que o CMD da Microsoft mantém para compatibilidade com versões anteriores desde as primeiras versões do COMMAND da Microsoft. Se um script de comando executar outro script de comando, o primeiro script de comando será cancelado.
A maneira de contornar isso é com o comando interno call
. Basta prefixar o script de comando com call
. Isso gera o comportamento que você, e suspeito que a maioria das pessoas, espera: o script de comando de chamada retoma a execução quando o script de comando chamado termina.
Você também pode usar cmd /c
, mas observe que isso não é a mesma coisa. call
apenas aninha os scripts de comando no mesmo interpretador de comandos. cmd /c
inicia um novo subprocesso do interpretador de comandos. Alterações feitas em variáveis, no diretório de trabalho, em identificadores de arquivos abertos e afins no subprocesso não afetarão seu pai. Por outro lado, call
é portável, caso um esteja usando intérpretes de comando de substituição, enquanto cmd
une um a um interpretador de comandos específico.