edicion de fichers de texto

Iniciado por diablo_jr, 19 Abril 2011, 09:01 AM

0 Miembros y 1 Visitante están viendo este tema.

diablo_jr

Buenas a todos.

Necesito recorrer con un script en batch un archivo de y en cada linea modificar ciertos caracteres. El script es el siguiente:

Código (bash) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
for /F "tokens=*" %%x in (file.xml) do (
set linea=%%x
set linea=%linea:script=XXXXXX%
echo !linea!>>file.xml)
)


Basicamente si quito la segunda linea de dentro del bucle me hace un volcado completo del xml pero si la dejo me da errores de tipo:

No se esperaba >& en este momento.

Hay que tener en cuenta que el xml puede tener " & > < y %.

He probado a hacer la siguiente modificación:

Código (bash) [Seleccionar]
@echo off
for /F "usebackq tokens=*" %%x in (file.xml) do (
call :tratalinea "%%x"
)
goto sustituirCambios
:tratalinea
set linea=%1
set linea=%linea:<=^<%
set linea=%linea:>=^>%
set linea=%linea:&=^&%
set linea=%linea:script=XXXXXX%
echo %linea:~1,-1%>>file.tmp
goto :eof
:sustituirCambios
ren file.tmp file_edit.xml
:fin

Pero me desaparecen los signos % al pasar el parametro a la función.

¿¿¿Alquien me puede ayudar???

FranciskoAsdf

Prueba colocando dobles "%" para que no se te reemplazen .

Saludos.


PD: Si eso no era , ps nada que hacer xD
Asdf debería ser algún tipo de función.

diablo_jr

No he entendido muy bien en cual de los dos códigos me dices que pongas los dobles %. De todos modos, ya tengo el código final casi listo, pero sigo con un problema similar.

Código (bash) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
set /A escribir=1
for /F "tokens=*" %%x in (file.xml) do (
set linea=%%x
set linea=%!linea!:amp;amp;=amp;%
set linea=%!linea!:amp;#=#%
if "!linea!" == "<TEXTO>" (set /A escribir=0)
if "!linea!" == "<url>" (set /A escribir=0)
if "!escribir!" == "1" (echo !linea!>>file.tmp)
if "!linea!" == "</TEXTO>" (set /A escribir=1)
if "!linea!" == "</url>" (set /A escribir=1)
)
ren file.tmp file_edit.xml


Con esto consigo filtrar ciertos campos del xml que me llega (los pinta todos menos "TEXTO" y "url") para que pese menos a la hora de tratarlos.

El caso es que me aparecen elementos del tipo &amp;amp; o &amp;#255; y quiero sustituir los &amp; por el & pero las dos lineas de reemplazo no me hacen lo correcto (todas las lineas del archivo resultante son amp;#=#

¿alguna idea?

FranciskoAsdf

A ver, si entendi lo que queires, deberias modificar esta linea:
Código (dos) [Seleccionar]

set linea=%!linea!:amp;#=#%


Y dejarla Así

Código (dos) [Seleccionar]

set linea=%!linea!:^&amp;#=#%


Archivo Test.xml


&amp;amp;
&amp;amp;
&amp;amp;
&amp;amp;
&amp;amp;
&amp;amp;
&amp;amp;
&amp;amp;
&amp;#255;
&amp;#255;
&amp;#255;
&amp;#255;
&amp;#255;
&amp;#255;
&amp;#255;
&amp;#255;
&amp;#255;
&amp;#255;
&amp;#255;


Corriendo el script con la linea modificada :
Salida.

&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#
&amp;#=#



Eso es lo que entendí xD

Espero haberte ayudado, aunque lo dudo xD


PD: Si quieres que CMD se "salte" algun caracter especial debes colocar el caracter "^" delante del caracter que quieres que se salte la cmd.




Asdf debería ser algún tipo de función.

xassiz~

Cierra la declaracion de variables con comillas:
Código (dos) [Seleccionar]

set "linea=%%x"
set "linea=%linea:script=XXXXXX%"


Usa expansión retardada para expandir linea dentro del for.