Cómo buscar y reemplazar una cadena en varios archivos de texto (dentro de un directorio) con Windows CMD?

Tengo varios archivos de texto dentro de un directorio, cada uno de los cuales quiero reemplazar cada aparición de la cadena 1 setlinewidth a 10 setlinewidth . ¿Cómo hago esto a través de Windows cmd? Por favor ayuda.

Si puede instalar utilidades de terceros, Gnu sed está hecho a la medida para este tipo de operaciones. El enlace apunta a una versión de Windows alojada en Sourceforge que puede descargar e instalar. Esta sería la sintaxis en el indicador:

for %i in (*.txt) do sed -i "s/1 setlinewidth/10 setlinewidth/g" %i 

Nota: con la opción -i , sed va a sobrescribir los archivos en cuestión, así que asegúrese de tener copias de seguridad fácilmente disponibles en caso de que algo salga mal.

Si no puede instalar la utilidad sed, esto va a ser mucho más difícil utilizando sólo el lenguaje de lotes integrado.

Edit: Puse un pequeño archivo de hornada que realizará el reemplazo sin ningunas herramientas externas. foo.cmd como foo.cmd o lo que sea su nombre preferido y foo.cmd desde la línea de comandos como: foo.cmd

Una advertencia: Esto se escribe muy específicamente a partir de los ejemplos en su pregunta. Si hay otro texto o incluso espacios adicionales al principio o al final de la línea antes / después de 1 setlinewidth , este archivo por lotes no funcionará. Esto también guardará una copia del archivo de texto original como con una extensión .bak (por ejemplo, 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 ) 

Powershell tiene utilidades que resolverán este problema sin descargar ningún software o utilidades externas. Echa un vistazo a este artículo por el Scripting Guy, es bastante bueno. También diría echar un vistazo a la documentación de Set-Content .

Ejemplo:

(Get-Content C:\Scripts\Test.txt) | Foreach-Object {$_ -replace "oldString", "newString"} | Set-Content C:\Scripts\Test.txt