Батник не слишком хорош для обработки текста. Два варианта:
Код:

@echo off
setlocal
:: 1-й вариант
for %%i in (*.txt) do (
for /f "tokens=*" %%j in ('type %%i') do (
1>>"%%~ni.tmp" (if "%%j"=="####!" (echo %%~ni) else (echo %%j))
move "%%~ni.tmp" "%%i"
))
:: 2-й вариант
for %%i in (*.txt) do (
1>"%%~ni.tmp" sed "s/####!/%%~ni/" %%i
move "%%~ni.tmp" "%%i"
)
Вариант на Powershell:
Код:

foreach ($f in (get-item *.txt)) { (get-content $f) -replace '####!',$f.basename | set-content $f }