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