Cómo sustituir palabras o strings en varios archivos de texto en Windows

A veces, puede que necesites reemplazar alguna palabra o string que está presente en varios archivos de texto. Esto en linux es una tarea sencilla que puedes hacer con find por ejemplo, pero te enseño cómo reemplazar texto en varios archivos a la vez en Windows.

Como te decía, te dejo aquí cómo sustituir palabras o strings de texto en varios archivos en Linux por si lo necesitas. El método es igual de sencillo en ambos, pero en windows vas a tener que echar mano de los archivos .bat.

Cómo reemplazar texto de forma recursiva en archivos en Windows

Los archivos .bat son scripts shell que pueden ejecutar una serie de comandos y funciones. Crearlos es tan simple como meter el código de tu script en un archivo de texto (o desde el bloc de notas) y cambiarle o guardarlo con la extensión .bat.

Una vez guardado el archivo con esa extensión, aparece con un icono de consola de comandos, y basta con hacer doble click sobre él para ejecutarlo. Si quieres saber cómo ejecutar archivos bat con permisos de administrador directamente te dejo el artículo.

Sustituir palabras en archivos de texto

Lo primero para meternos ya en materia, es que tengas todos los archivos sobre los que quieres sustituir el texto dentro de una carpeta o subcarpetas dentro de la que hará de principal.

Una vez en ese punto abre el bloc de notas (tecla win y escribe bloc), y pega este código:

Get-ChildItem 'carpeta-principal\*.txt' -Recurse | ForEach {
(Get-Content $_ | ForEach { $_ -replace 'a-sustituir', 'nuevo-texto' }) |
Set-Content $_
}

En este script tienes que cambiar la carpeta-principal por la que coincida con el nombre de la tuya, o si vas a empezar en la misma carpeta en la que esté el script poner “.\*.txt” sin las comillas.

Léete también  Qué son los archivos .trec de Camtasia y ¿Puedo borrarlos para liberar espacio?

En este caso he puesto para que busque solo los archivos .txt, pero puedes cambiar la extensión por lo que quieras, o incluso poner *.* y buscará en todo tipo de archivos. Lo último es cambiar a-sustituir por el texto que quieres encontrar, y nuevo-texto por el texto que será reemplazado.

Una vez lo tengas ya preparado con los parámetros que necesitas sustituir. En caso de que quieras poner el script en cualquier sitio siempre puedes usar una ruta absoluta:

C:\ruta\a\donde\tienes\los\archivos\*.txt

Solo te queda darle a guardar en el block de notas, seleccionar como tipo todos los archivos y darle nombre.bat para que se guarde con esta extensión. Si lo has guardado como .txt solo tienes que hacer click derecho sobre el archivo guardado y darle a cambiar nombre (o click y darle a la tecla f2).

Una vez ya te aparezca con el icono de consola, solo basta hacer doble click para que empiece a sustituir el texto en todos los archivos interiores.

Para cambiar la sustitución solo hay que editarlo con click derecho, y te abrirá el block de notas, aunque yo te recomiendo usar notepad++ para estos menesteres.

Como sustituir varios strings en windows con un solo comando

Si quieres sustituir varias palabras con el mismo comando te bastará con utilizar acentos graves para separar los replace:

Get-ChildItem 'carpeta-principal\*.txt' -Recurse | ForEach { (Get-Content $_ | ForEach { $_ -replace 'primeracoincidencia', 'nuevo-texto' ` -replace 'segundacoincidencia', 'nuevo-texto' }) | Set-Content $_ }

Puedes encadenar tantos como necesites de esta forma, pero ten siempre en cuenta en poner los menos específicos al final. Por ejemplo, si quieres sustituir «ave» y «avestruz», deberías poner primero avestruz y luego ave, ya que si no te va a sustituir la parte de ave en avestruz y luego no te coincidirá.

Léete también  Como crear links simbólicos en linux

Si tienes alguna duda, o quieres hacer alguna otra cosa y no sabes como, deja tu pregunta y te echaré una mano.


AYUDANOS a poder seguir dando respuestas. Te podemos echar una mano y tú también a nosotros, símplemente dale a me gusta.