Se você pode instalar utilitários de terceiros, o Gnu sed é feito sob medida para esse tipo de operação. O link aponta para uma versão do Windows hospedada no Sourceforge que você pode baixar e instalar. Esta seria a sintaxe no prompt:
for %i in (*.txt) do sed -i "s/1 setlinewidth/10 setlinewidth/g" %i
Nota: com a opção -i
, o sed vai sobrescrever os arquivos em questão, por isso certifique-se de ter backups facilmente disponíveis para o caso de algo dar errado.
Se você não conseguir instalar o utilitário sed, isso será muito mais difícil usando apenas a linguagem de lote integrada.
Edit: Eu montei um pequeno arquivo de lote que irá realizar a substituição sem nenhuma ferramenta externa. Salve-o como foo.cmd
ou qualquer que seja seu nome preferido e chame-o da linha de comando como: foo.cmd
Uma ressalva: Isso é escrito muito especificamente a partir dos exemplos em sua pergunta. Se houver outro texto ou mesmo espaços extras no início ou no final da linha antes / depois de 1 setlinewidth
, esse arquivo em lotes não funcionará. Isso também salvará uma cópia do arquivo de texto original como uma extensão .bak (por exemplo, textfile.txt.bak).
@echo off
setlocal ENABLEEXTENSIONS
setlocal ENABLEDELAYEDEXPANSION
for %%a in (*.txt) do (
echo Processing %%a...
for /f "delims=^ tokens=1" %%i in (%%a) do (
if /i "%%i"=="1 setlinewidth" (
echo 10 setlinewidth>>%%a.new
) else (
echo %%i>>%%a.new
)
)
move /y %%a %%a.bak > nul
ren %%a.new %%a
)