Leer xml desde archivo batch

Iniciado por Dead0922, 21 Abril 2009, 13:32 PM

0 Miembros y 2 Visitantes están viendo este tema.

Dead0922

Hola a todos,
Tengo un proceso en batch donde le pasaba 2 parámetros uno por uno, pero ahora necesito leerlos desde un archivo xml, en este xml tengo agrupados los parámetros como propiedades, y quiero q para todo lo q tenga en el xml se ejecute con lanzar una sola vez el proceso batch.
Si alguien me puede ayudar, le agradecería muchiiiiiiiisimo   :-*

SmartGenius

Podrias poner que formato tiene el XML par asi poder ayudarte, tambin que es es lo que quieres hcer con esos datos.....asi sin nada no podemos hacer mucho :P

Saludos.


Dead0922

Por ejemplo, los datos que manejo son:
<argumento>
            <nombre>xxxxxxxxxxxx1</nombre>
            <tipo>yyyyyyyyyy.zip</tipo>
</argumento>

ahora, esta estructura se puede repetir, las veces que el usuario lo requiera (modificando el xml), aparte.. internamente en el batch se hace una búsqueda según el "tipo" dentro de la carpeta que se especificó en "nombre"(eso ya lo tengo, pero para un solo grupo de argumentos... no para muchos en caso que estos pasen como xml)

Entonces mi duda es: como hago que el batch lea este archivo xml, que tiene agrupados los argumentos????? para que despues los pueda procesar uno por uno????

Gracias  :-\

SmartGenius

Suponiendo que toda la estructura de datos en el XML es tal cual como la posteas...

Cita de: Dead0922 en 22 Abril 2009, 09:56 AM
<argumento>
            <nombre>xxxxxxxxxxxx1</nombre>
            <tipo>yyyyyyyyyy.zip</tipo>
</argumento>

Habria que usar FOR y FIND para buscar y separar las cadenas y definirlas en variables para despues poder trabajar con ellas...

Ej:
DATOS.XML
<argumento>
            <nombre>SmartGenius</nombre>
            <tipo>Usuario</tipo>
</argumento>
<argumento>
            <nombre>Novlucker</nombre>
            <tipo>Moderador</tipo>
</argumento>
<argumento>
            <nombre>Leo Gutierrez</nombre>
            <tipo>Moderador</tipo>
</argumento>
<argumento>
            <nombre>0x0309</nombre>
            <tipo>Usuario</tipo>
</argumento>


Podria realizar algo como esto...

LeeDatos.Bat
Código (dos) [Seleccionar]
@echo off
::Coded by SmartGenius

setlocal enabledelayedexpansion
:Init
for /f "tokens=3 delims=^>^<" %%a in ('find "nombre" datos.xml') do (
set /a N+=1
set Nombre!N!=%%a
)
for /f "tokens=3 delims=^>^<" %%b in ('find "tipo" datos.xml') do (
set /a T+=1
set Tipo!T!=%%b
)
echo. Datos del XML
for /l %%c in (1,1,!N!) do (echo. Dato%%c: !Nombre%%c! - !Tipo%%c!)
echo.
pause
exit


Saludos.


Dead0922

#4
Hola, gracias por lo de xml, me sirvió muchísimo.
Ahora mi duda es, que a medida q vaya leyendo del xml, tengo q almacenar los datos en variables temporales y despues hacer algunas instrucciones if y pasar al siguiente valor de la variable, lo estoy haciendo usando etiquetas.. pero en algún momento el valor de la variable se pierde o quizas estoy capturandolo mal ya que no se como funciona eso del %%. En fin... tengo esto

for /l %%c in (1,1,!N!) do (

echo. !ValorPrimeraVariable%%c! - !ValorSegundaVariable%%c!
cd /d "%homedrive%\Ruta\!ValorPrimeraVariable%%c!"
for /d /r %%_ in (*) do (
if exist "%%_\!ValorSegundaVariable%%c!" (
call :copia "%%_\!ValorSegundaVariable%%c!"
    )
)
goto:eof
   )
:copia
echo. Entrando al COPIA
**************Esta es mi duda.. como hago para leer el valor q tengo al inicio.. pero desde aqui.



Espero me puedan ayudar!
Muchas Gracias

leogtz

Necesitas poner el codigo entero.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Dead0922

@echo off
setlocal enabledelayedexpansion
:Init
for /f "tokens=3 delims=^>^<" %%a in ('find "nombre" datos.xml') do (
   set /a N+=1
   set Nombre!N!=%%a
)
for /f "tokens=3 delims=^>^<" %%b in ('find "tipo" datos.xml') do (
   set /a T+=1
   set Tipo!T!=%%b
)
if not exist "%homedrive%\File" md "%homedrive%\File"

echo. Obteniendo datos de XML
for /l %%c in (1,1,!N!) do (
   echo. Dato%%c: !Nombre%%c! - !Tipo%%c!
        cd /d "%homedrive%\Ruta\!Nombre%%c!"
   for /d /r %%_ in (*) do (
      if exist ""%%_\%Tipo%"" (
                                        call :copia "%%_\%Tipo%")
                                      )
                                 )
:copia
cd /d "%homedrive%\File"
echo !Nombre%%c!_!Tipo%%c!
copy /y %1 "%homedrive%\File\%Nombre%_%Tipo%"

echo Proceso Completo
pause
exit

------------------------------------------------------------------------------------------
No se si estoy llamando mal a las variables o cual es mi error?.. lo cierto es que
en la etiqueta "copia".. ya no se muestran los valores.. y yo lo q tengo q hacer es según cada par de valores que obtenga del xml, hacer una búsqueda y el resultado de la búsqueda (si existe) copiarlo en otra carpeta!


Dead0922

ya resolví el problema...
dentro del for hago todo sin llamar a la etiqueta, bueno hasta ahora funciona bien.. si tienen otra solucion... me avisan

gracias

Dead0922

Hola denuevo,
quisiera saber como hago para leer parámetros que están dentro de un archivo .ini e ir usándolos en el script de batch.
Gracias!