Quando você executa o código exatamente como determinado no seu exemplo,
O fluxo de código é executado na sub-rotina porque não há goto :eof
ou Exit /b
na frente do rótulo :afterchar
para evitar isso.
Como não há argumentos passados para o lote principal desta vez, tente executar:
echo | set /p=" = "
causa o erro. Você veria isso se você executasse o lote com o conjunto echo on
:: Q:\Test18\SU_1344049.cmd
call :afterchar text text=text
:: here belongs a termination
goto :eof
:afterchar
echo|set /p=" %2=%3 "
exit /b