Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Sustituir una cadena por otra | script bat bacht ms-dos

21 noviembre, 2013

Con este batch podemos sustituir una cadena por otra a todos los ficheros que se encuentren dentro de una carpeta.

El código lo encontré en de la web todoexpertos, lo comparto porque me pareció muy útil.

Copiamos el código siguiente y lo metemos dentro de un fichero que yo he llamado sustituye.bat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
Setlocal EnableDelayedExpansion
if "%3" == "" goto ayuda
set cadorig=%1
set cadorig=%cadorig:"=%
set cadsust=%2
set cadsust=%cadsust:"=%
for %%f in (%3) do (call :cambiar %%f)
goto fin
:cambiar
set archivo=%1
for /f "tokens=* delims=" %%i in (%archivo%) do (set ANT=%%i&echo !ANT:%cadorig%=%cadsust%! >>kk_temp.txt)
copy /y kk_temp.txt %archivo%
del /q kk_temp.txt
goto :EOF
:Ayuda
Echo Reemplaza una cadena por otra en el contenido de archivos (con comodines)
echo Utiliza un archivo temporal kk_temp.txt que no debe existir previamente
echo Formato: %0 cadorig cadsust archivos
echo Si las cadenas contienen espacios deben escribirse entrecomilladas
echo No funciona si la cadena original contiene un "="
Echo Ejemplo:
echo %0 de DE *.txt
:Fin

Para ejecutarlo, lo llamamos y le pasamos los tres parámetros que necesitamos desde la consola de ms-dos.
Los parámetros son:
1- La cadena a buscar.
2- La cadena que vas a sustituir.
3- La carpeta o archivo en la que quieres que se realice el cambio.

sustituye.bat PALABRA_A_BUSCAR "SUSTITUIR_POR" C:\prueba\*.sql

En el caso que queramos sustituir un grupo de cadenas, podemos hacerlo mediante un script que irá llamando a nuestro
bat sustituye.bat cambiando los parámetros.

El código sería así:

1
2
3
4
5
6
7
@echo off
echo lanza_sustituye
CALL C:\prueba\sustituye.bat PALABRA_A_BUSCAR1 "SUSTITUIR_POR1" C:\prueba\*.sql
CALL C:\prueba\sustituye.bat PALABRA_A_BUSCAR2 "SUSTITUIR_POR2" C:\prueba\*.sql
CALL C:\prueba\sustituye.bat PALABRA_A_BUSCAR3 "SUSTITUIR_POR3" C:\prueba\*.sql
....
....

El fichero lo he llamado lanza.bat y tal y como está sustituiria una cadena por otra en todos los archivos .sql que se encuentren dentro de la carpeta prueba.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Comentarios (10)

Buen dia podrias ayudarme, es perfecto tu codigo, pero tengo una exepcion. No logro que funcione para reemplazar el simbolo | por otro caracter, ya que me dice que el caracter por el que lo voy a reemplazar no es un parametro. osea q me esta poniendo poblema para trabajar con ese simbolo.

He usado ponerlo con ^| pero no sirve.

Gracias

Responder

No funciona bien. En cada linea que contenga <!– lo convierte a <– aunque no tenga nada que ver con los textos que deseas convertir.

Responder

Soy nuevo en este tipo de scripts, pero tambien me pasa lo mismo, queria saber si encontraste la solucion y cual seria?, me serviria de gran ayuda. Muchas gracias y perdon por las molestias.
Por que el archivo quita el caracter ! Ejemplo: cambia <!– por esto <–

Responder

Muy bueno el script, lo que sí me pasó es que tuve que poner entre comillas para que me tome correctamente la cadena a buscar:
Ej. sustituye.bat “PALABRA_A_BUSCAR” “SUSTITUIR_POR” C:prueba*.sql .
Saludos y gracias

Responder

Cojonudo good job. Me funciona perfecto.

Responder

Estoy probando este ejemplo y tengo un tema, cuando el archivo tiene lineas en blanco, imprime “ECHO is off.”

Responder

Buena tardes,
Como puedo colocarle una condicion si solo quiero que reemplace una palabra si la linea contiene otra?

Responder

Alguien sabe como poner caracteres comodines en las cadenas??

Responder

Muchas gracias, tenia que modificar como 15 mil archivos y despues de editar unos 500 ya me habia aburrido 🙂

@echo off
Setlocal EnableDelayedExpansion
if “%3” == “” goto ayuda
set cadorig=%1
set cadorig=%cadorig:”=%
set cadsust=%2
set cadsust=%cadsust:”=%
for %%f in (%3) do (call :cambiar %%f)
goto fin

:cambiar
set archivo=%1
for /f “tokens=* delims=” %%i in (%archivo%) do (set ANT=%%i&echo !ANT:%cadorig%=%cadsust%! >>wrk_temp.txt)
copy /y wrk_temp.txt %archivo%
del /q wrk_temp.txt
goto :EOF

:Ayuda
cls
Echo Reemplaza una cadena por otra en el contenido de archivos (con comodines)
echo.
echo Utiliza un archivo temporal wrk_temp.txt que no debe existir previamente
echo.
echo Formato: %0 cadenaOriginal cadenaSustituir archivos
echo.
echo Si las cadenas contienen espacios deben escribirse entrecomilladas
echo No funciona si la cadena original contiene un “=”
echo.
echo Ejemplo:
echo %0 antes despues *.java
:Fin

Responder

Al final.. tambien despues de unos miles de archivos me encontre que este script generaba errores al codigo original, tal como comentas cuando hay instrucciones con simbolo “=” y claramente, las subcarpetas, que no las afecta.

La solucion la encontre en linux, compacte los 15 mil archivos de codigo (no eran mas de 3mb) los subi por FTP a mi server en Linux, y ejecute lo siguiente:

find /home/tuUser/tuCarpeta/ -name *.java -exec sed -i “s/cadenaOriginal/canenaNueva/g” {} ;

y problemas “realmente” Solucionado. Basicamente, reemplaza un string a todos los “*.java” y al regresarlos, compilo sin errores.

Saludos y espero que tambien sea de ayuda para alguien.

hivitro | inurbanos.com

Responder