Saltar al contenido

Cómo buscar y reemplazar un string en múltiples archivos de texto (dentro de un directorio) con Windows CMD?

Esta inquietud se puede tratar de diversas maneras, sin embargo te enseñamos la respuesta más completa para nosotros.

Solución:

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

Ejemplo:

(Get-Content C:ScriptsTest.txt) |
Foreach-Object $_ -replace "oldString", "newString" |
Set-Content C:ScriptsTest.txt

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

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

Nota: con el -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 será mucho más difícil usando solo el lenguaje por lotes integrado.

Editar: Reuní un pequeño archivo por lotes que realizará el reemplazo sin herramientas externas. guardarlo como foo.cmd o cualquiera que sea su nombre preferido e invóquelo desde la línea de comando como: foo.cmd

Una advertencia: Esto está escrito 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 o después 1 setlinewidth, este archivo por lotes no funcionará. Esto también guardará una copia del archivo de texto original 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
)

Si estás contento con lo expuesto, tienes la libertad de dejar una sección acerca de qué le añadirías a esta crónica.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *