Isso é mais divertido do que prático, mas é possível. Você pode usar for /f
para passar por um arquivo uma linha por vez, mas não conheço nenhuma maneira trivial de acompanhar a linha atual. O código a seguir usa uma chamada para uma sub-rotina para contar as linhas manualmente. O arquivo em lote deve ser chamado usando o nome do arquivo, o número da linha para substituir e a string substituta.
@echo off
set filename=%1
set targetline=%2
set message=%3
set n=0
for /F "tokens=*" %%i in (%filename%) do call :write %%i
exit /b 0
:write
set /a n+=1
if %n%==%targetline% (echo %message%) else echo %*
exit /b 0
Exemplo de saída de replace.bat somelines.txt 3 "Hello, world!"
:
first line
second line
"Hello, world!"
fourth line