don't put pause at the end of the batch, but rather in the same area that Tan_Za has placed their pause, which is right before the subroutine.
here, I also fixed a bug involving a forgotten GOTO :EOF, not sure if it was affecting the program or not, though.
@echo off
title File Counter batch.
:recurse
set I=1
echo "files in folder"
cd
REM view all files, EXCEPT directories.
FOR /f "tokens=*" %%P IN ('dir /A-d /b') do (call :showfiles "%%P")
echo Filecount: %I%
REM now call on all subfolders...
PAUSE
goto :eof
:showfiles
echo %1
set /a I+=1
goto :eof