Reemplazar texto de un bloc de notas con archivo bat

Problema:

Un archivo de excel me genera de forma automática un archivo con extensión "txt", el archivo contiene código html, el problema consiste en que al momento de guardarlo en txt pasa lo siguiente:

Forma en que debería estar:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Forma en que aparece:

"<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"

Es solo un ejemplo, existen más casos, pero el punto es que necesito reemplazar "< (comillas y símbolo menor que) por < (símbolo menor que) y "" (doble comillas) por " (comillas), e leído algunos problemas en los cuales usted ayudo a solucionar mediante código en cmd.

1 respuesta

Respuesta
1

En principio lo que sigue debería resolver tu problema. He supuesto que el archivo a modificar se llama cesar.txt y en lugar de reescribirlo guardo el archivo modificado en temp.txt. Si lo quieres reescribir basta con que borre el "rem " de la última instrucción:

@echo off
Setlocal EnableDelayedExpansion
del /q temp.txt
for /f "tokens=* delims=" %%i in (cesar.txt) do (
set ANT=%%i
set ANT=!ANT:"<=<!
set ANT=!ANT:^>"=>!
set ANT=!ANT:""="!
echo !ANT!>>temp.txt
)
rem copy /y temp.txt cesar.txt

Imagino que ya habías probado algo así y no te funcionaba del todo bien, tal vez por la peculiaridad de tener que "escapar" el carácter ">" anteponiéndole el "^" (cosa que no hay que hacer después del "=" ni tampoco para el carácter "<". Rarezas del MSDOS.

Mi experiencia reciente me dice que el editor de la página va a cambiar la línea "echo !ANT!>>temp.txt" por "Echo ! ANT!>>temp.txt". Si fuera así tenlo en cuenta y, sobre todo, elimina el espacio entre "!" y "ANT" porque inutiliza el comando.

Copio aquí mi entorno de pruebas para que puedas ver los cambios. Me he limitado a copiar varias veces la línea de ejemplo, pero habría que probar con un archivo real antes de dar por buena la solución:

D:\BAT>type cesar.txt
"<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"
"<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"
"<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"
"<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"
"<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"
"<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"
"<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"
"<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"">"
D:\BAT>type cesar.bat
@echo off
Setlocal EnableDelayedExpansion
del /q temp.txt
for /f "tokens=* delims=" %%i in (cesar.txt) do (
set ANT=%%i
set ANT=!ANT:"<=<!
set ANT=!ANT:^>"=>!
set ANT=!ANT:""="!
echo !ANT!>>temp.txt
)
rem copy /y temp.txt cesar.txt
D:\BAT>cesar
D:\BAT>type temp.txt
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Pruébalo y nos cuentas.

Por cierto, acabo de ver que no incluías en tu texto la sustitución de >" por > aunque se deducía del ejemplo aportado

Otra cosa. Acabo de ver que la sustitución por parte del editor de la página de la línea del "echo", contra la que te advertía, no ha ocurrido. Recientemente les volví a comentar ese defecto y parece que lo han corregido. Me alegro mucho pues ya ha causado unos cuantos problemas en el pasado.

¡Gracias! 

Es justo lo que necesitaba, el problema quedo resuelto

Una duda más, al reemplazar los caracteres con el bat, dentro del código html me genera una linea que no tenia: "ECHO est  desactivado."

Existe alguna manera de evitarlo?

<!DOCTYPE html>                                                                                                    
<html>                                                                                                        
    <head>                                                                                                    
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">                                                                                                
        <title>Comportamiento del día</title>                                                                                                
ECHO est  desactivado.
        <script type="text/javascript" src="jquery/jquery.min.js"></script>                                                                                                                                                                                              

El mensaje "ECHO está desactivado" (la "á" de MSDOS se ve como un espacio en Windows) se produce cuando se hace ECHO de una variable vacía (o de una variable que solo contiene espacios, porque el comando ECHO elimina todos los espacios finales). Pero el FOR del BAT, tal como está, elimina las líneas en blanco, por lo que tendría que tratarse de líneas con solo blancos (en este contexto una "línea en blanco" sería una línea solo con "retorno de carro" o "cambio de línea" y una "línea con solo blancos" sería una línea que, además del "retorno de carro" o "cambio de línea", tiene uno o más espacios). He probado los dos casos y, efectivamente, es el segundo caso el que produce lo que me has indicado. La solución pasa por modificar la línea:

Echo ! ANT!>>temp.txt

Por esta otra:

if not "!ANT: =!"=="" echo !ANT!>>temp.txt

Pruébalo y me dices. Si no funciona pásame un ejemplo real que provoque líneas con "ECHO est desactivado" para que pueda probar.

Veo que el editor de la página sigue haciendo de las suyas y ha convertido "echo !ANT!>>temp.txt" en "Echo ! ANT!>>temp.txt". Imagino que en este caso no va a crear problemas, porque creo que está claro que línea hay que cambiar, pero por si acaso.

Su respuesta me fue de gran ayuda, elimine esa línea en blanco de la macro que genera el código html y se soluciono, nuevamente le agradezco por su pronta atención.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas