Потому что команда запускает самоё себя, бесконечно. И в какой-то момент просто перестаёт хватать оперативной памяти и производительности процессора.
Количество рекурсий? Передавать текущий номер рекурсии как аргумент. Разумеется перед тем, как его передавать - его нужно увеличить на 1, что бы следующий потомок его знал:
@echo off
set /A LVL=%1+1
if %LVL% LEQ 3 %0 %LVL% |%0 %LVL%