Из комментариев здесь не ясно одно: когда вы вызываете один пакетный файл из другого, используя только его имя (случай № 1 в исходном вопросе), выполнение останавливает из вызывающего пакетного файла. Например, в этих строках:
called.bat
echo Hello
Строка 'echo Hello' (и все, что следует за ней) не будет вызвана. Если вы используете ключевое слово call, выполнение возобновляется после вызова. Так что в этом случае:
call called.bat
echo Hello
Будет вызвана строка 'echo Hello'.
Кроме того, все переменные, заданные в файле named.bat, также будут переданы обратно вызывающему процессу.
Представьте себе файл с именем "named.bat", который имеет следующую строку:
set MYVAR=hello
Тогда% MYVAR% будет доступен вызывающему пакетному файлу, если он использует:
call called.bat
Но он не будет использовать
REM starts a new cmd.exe process
start called.bat
REM stops and replaces current cmd.exe process with a new one
called.bat