Reemplazar strings

Quiero generar un fichero batch que, a partir de un fichero cualquiera, en este caso es un fichero PHP que contiene una serie de constantes, pudiese cambieer un contenido específico por otro que le pasara por parámetro. Como por ejemplo: sustituir "hola" por "

1 respuesta

Respuesta
1
Es la segunda vez que respondo y, como me suele ocurrir, no tomé la precaución de copiar mi respuesta de modo que me toca volverla a escribir. En la anterior cuando la envié mi usuario fue suplantado por un tal "dondescanso" supuesto experto en colchones que más parece un "bot" de propaganda.
Decía en mi respuesta original que el tema de reemplazar cadenas en archivos mediante un programa batch (tal vez mejor llamarlo "guión") es un asunto delicado. Me he puesto a estudiarlo (y a buscar en la red también, por qué no decirlo) y según los condicionantes puede haber diferentes soluciones (por ejemplo no sería lo mismo sustituir palabras, es decir cadenas delimitadas por espacios o tabuladores, que sustituir cadenas que no tienen que coincidir con palabras). La solución que me parece más general y a la vez más sencilla (si olvidamos que precisa del comando SETLOCAL ENABLEDELAYEDEXPANSION, que no había usado nunca y es muy prometedor) es la que apunto aquí abajo:
@echo off
Setlocal EnableDelayedExpansion
del kkk.txt
if "%3" == "" goto ayuda
for /f "tokens=* " %%i in (%3) do (set ANT=%%i
echo !ANT:%1=%2! >> kkk.txt)
goto fin
:Ayuda
Echo Reemplaza una cadena por otra en todo el contenido de un archivo
echo Formato: sust cadorig cadsust archivo
echo Ejemplos:
echo sust de DE kk.txt
:Fin
Como se da a entender en la "ayuda" asumo que el código anterior se guarda como archivo SUST.BAT. El archivo con las sustituciones se guarda en KKK.TXT. Este código tiene algunos problemillas: elimina las líneas en blanco, elimina los espacios que preceden a una línea y no permite que en las cadenas sustituidora o sustituida haya espacios en blanco. Supongo que en un PHP el segundo problemilla puede ser el más importante.
Mira a ver que tal te sirve. Si crees que habría que seguir intentándolo o tirar por otro camino puedes decírmelo.
Saludos,
GGG
Conseguir que desaparezca el segundo defecto que comentaba es muy sencillo, basta añadir "delims=" para que no considere a los espacios como delimitadores. Además queda más compacto y elegante (en mi opinión) con esta configuración:
@echo off
Setlocal EnableDelayedExpansion
del kkk.txt
if "%3" == "" goto ayuda
for /f "tokens=* delims=" %%i in (%3) do (set ANT=%%i&echo !ANT:%1=%2! >> kkk.txt)
goto fin
:Ayuda
Echo Reemplaza una cadena por otra en todo el contenido de un archivo
echo Formato: sust cadorig cadsust archivo
echo Ejemplos:
echo sust de DE kk.txt
:Fin
Saludos,
GGG
Con ayuda de una persona que sabe más que yo de esto he conseguido resolver también el tercer problema (el de los espacios en blanco en las cadenas sustituidora y/o sustituida). Solo quedaría la eliminación de las líneas en blanco.
Así es como estaría ahora:
@echo off
Setlocal EnableDelayedExpansion
del kkk.txt
if "%3" == "" goto ayuda
set cadorig=%1
set cadorig=%cadorig:"=%
set cadsust=%2
set cadsust=%cadsust:"=%
for /f "tokens=* delims=" %%i in (%3) do (set ANT=%%i&echo !ANT:%cadorig%=%cadsust%! >> kkk.txt)
goto fin
:Ayuda
Echo Reemplaza una cadena por otra en todo el contenido de un archivo
echo Formato: sust cadorig cadsust archivo
echo Si las cadenas contienen espacios deben escribirse entrecomilladas
echo El archivo corregido se deja en kkk.txt
echo Ejemplo:
echo sust de DE kk.txt
:Fin
Solo espero que la impaciencia no haya hecho que dejes de visitar este sitio porque sería una pena perder la oportunidad de que alguien use esto.
Saludos,
GGG
Me temo que no ha habido suerte y que mi respuesta ya no llegará a su destinatario.
Una pena, aunque siempre me quedará el consuelo de haber aprendido algo yo mismo.
Saludos (seguramente a nadie),
GGG
Creo que esta web te estará enviando mis respuestas a tu dirección de correo. No sé si no dices nada porque no te llegan o porque ya no te interesa el asunto, tal vez porque ya lo hayas resuelto. Pero si recibes ésta me gustaría que cerraras la pregunta para que no se quede ahí enquistada. Creo que puedo descartarla, pero me parece una opción menos "elegante".
Saludos y gracias,
GGG
He comprobado que el bat no funciona, o no funciona bien, cuando en la cadena a sustituir o en la sustituidora hay algunos caracteres de los que se tratan de forma especial (=><"^!)
Lo digo por si le sirve a alguien.
GGG

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas