elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Necesito ayuda con un script que modifique un archivo xml
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito ayuda con un script que modifique un archivo xml  (Leído 2,017 veces)
precambrico

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Necesito ayuda con un script que modifique un archivo xml
« en: 24 Abril 2014, 19:32 pm »

Buenas a tod@s,

Tengo un problema, he de modificar un archivo xml del filezilla en muchos equipos y estoy atascado a la hora de hacer el script, porque necesito cambiar el nombre del usuario y el la Pass están en rojo, el problema viene cuando se modifica el nombre del usuario también se modifica el del host porque ambos contienen la misma palabra contenidos os adjunto la parte del código del xml

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<FileZilla3>
    <Servers>
        <Folder expanded="1">Redaccion
            <Server>
                <Host>ftp-contenidos.int</Host>
                <Port>21</Port>
                <Protocol>0</Protocol>
                <Type>0</Type>
                <User>contenidos</User>
                <Pass>iW5kexal5M</Pass>
                <Logontype>1</Logontype>
                <TimezoneOffset>0</TimezoneOffset>
                <PasvMode>MODE_DEFAULT</PasvMode>
                <MaximumMultipleConnections>0</MaximumMultipleConnections>
                <EncodingType>Auto</EncodingType>
                <BypassProxy>0</BypassProxy>
                <Name>Contenidos-interno</Name>
                <Comments></Comments>
                <LocalDir></LocalDir>
                <RemoteDir></RemoteDir>
                <SyncBrowsing>0</SyncBrowsing>Contenidos-interno
            </Server>
            <Server>
                <Host>ftp-interno.int</Host>
                <Port>21</Port>
                <Protocol>0</Protocol>
                <Type>0</Type>
                <User>sdl</User>
                <Pass>kJdm43!</Pass>
                <Logontype>1</Logontype>
                <TimezoneOffset>0</TimezoneOffset>
                <PasvMode>MODE_DEFAULT</PasvMode>
                <MaximumMultipleConnections>0</MaximumMultipleConnections>
                <EncodingType>Auto</EncodingType>
                <BypassProxy>0</BypassProxy>
                <Name>ftp-interno</Name>
                <Comments></Comments>
                <LocalDir></LocalDir>
                <RemoteDir></RemoteDir>
                <SyncBrowsing>0</SyncBrowsing>ftp-interno
            </Server>
        </Folder>
    </Servers>
</FileZilla3>

Bueno yo he conseguido lo siguiente, con este código me cambia la pass, esto si funciona aparentemente

@echo off
Setlocal EnableDelayedExpansion

set HOME=\\scripts\chftp
set USER=xxx.int\admin
set PASS=admin

:: ojo, hay que escapar algunos caracteres, el simbolo de dólar entre ellos

set OLDPASS1=contenid0\$
set OLDPASS2=GqedVja8
set OLDPASS3=iW5kexal5M
set NEWPASS=Contenido1
set TIMESTAMP=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%

taskkill /s %1 /u %USER% /p %PASS% /IM filezilla.exe /F

net use \\%1\c$ /d > nul 2>&1
net use \\%1\c$ %PASS% /user:%USER%
if not %errorlevel% EQU 0 goto ERROR
pushd \\%1\c$
if not %errorlevel% EQU 0 goto ERROR

set SEDEXPR1="s/%OLDPASS1%/%NEWPASS%/g"
set SEDEXPR2="s/%OLDPASS2%/%NEWPASS%/g"
set SEDEXPR2="s/%OLDPASS3%/%NEWPASS%/g"

for /D %%a in ("\documents and settings\*.*") do (

set INFILE="%%a\Datos de programa\FileZilla\sitemanager.xml.%TIMESTAMP%"
set OUTFILE="%%a\Datos de programa\FileZilla\sitemanager.xml"
set TMPFILE="%%a\Datos de programa\FileZilla\sitemanager.tmppass"

if exist !OUTFILE! (
copy /Y !OUTFILE! !INFILE!
%HOME%\sed.exe !SEDEXPR1! !INFILE! >!TMPFILE!
%HOME%\sed.exe !SEDEXPR2! !TMPFILE! >!OUTFILE!
del !TMPFILE!
)
)

popd
echo HECHO
goto END

:ERROR
echo FALLO

:END
net use \\%1\c$ /d > nul 2>&1


Esta parte es la que no funciona me modifica todo

@echo off

Setlocal EnableDelayedExpansion

set HOME=\\scripts\chftp
set USER=xxx.int\admin
set PASS=admin

:: ojo, hay que escapar algunos caracteres, el simbolo de dólar entre ellos.
:: En el primer paso del fichero cambiamos el usuario.

set OLDUSER=contenidos
set NEWUSER=informacion


set TIMESTAMP=%DATE:~-4%%DATE:~3,2%%DATE:~0,2%

taskkill /s %1 /u %USER% /p %PASS% /IM filezilla.exe /F

net use \\%1\c$ /d > nul 2>&1
net use \\%1\c$ %PASS% /user:%USER%

if not %errorlevel% EQU 0 goto ERROR
pushd \\%1\c$
if not %errorlevel% EQU 0 goto ERROR

set SEDEXPR1="s/%OLDUSER%/%NEWUSER%/g"
set SEDEXPR2="s/%NEWUSER%/%NEWUSER%/g"

for /D %%a in ("\documents and settings\*.*") do (

set INFILE="%%a\Datos de programa\FileZilla\sitemanager.xml.%TIMESTAMP%"
set OUTFILE="%%a\Datos de programa\FileZilla\sitemanager.xml"
set TMPFILE="%%a\Datos de programa\FileZilla\sitemanager.tmppass"
if exist !OUTFILE! (
copy /Y !OUTFILE! !INFILE!
%HOME%\sed.exe !SEDEXPR1! !INFILE! >!TMPFILE!
%HOME%\sed.exe !SEDEXPR2! !TMPFILE! >!OUTFILE!
del !TMPFILE!
)
)
popd
echo HECHO
goto END

Solo necesito cambiar el user que esta en color rojo, mejor dicho no se como llegar a decirle al programa como llegar a la etiqueta user y modifique unicamente el user y deje el host como esta.

Muchas gracias


[MOD] Deberias usar las etiquetas GeSHi, para poner el código.


« Última modificación: 24 Abril 2014, 22:15 pm por simorg » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Necesito ayuda con un script que modifique un archivo xml
« Respuesta #1 en: 25 Abril 2014, 06:56 am »

Como veo que no te importa depender de aplicaciones de terceros entonces en lugar de utilizar 'SED' podrías utilizar alguna herramienta óptima para la manipulación de XML, como por ejemplo 'XML Starlet':

Código
  1. @Echo OFF
  2.  
  3. Set "XmlInput=.\FileZilla.xml"
  4. Set "XmlOutput=.\Nuevo documento.xml"
  5.  
  6. Set "UserXPath=FileZilla3/Servers/Folder/Server/User"
  7. Set "UserValue=Nuevo Usuario"
  8.  
  9. Set "PassXPath=FileZilla3/Servers/Folder/Server/Pass"
  10. Set "PassValue=Nuevo Pass"
  11.  
  12. .\xmlstarlet.exe ed -u "%UserXPath%" -v "%UserValue%" -u "%PassXPath%" -v "%PassValue%" "%XmlInput%" > "%XmlOutput%"
  13.  
  14. Pause&Exit

Saludos


« Última modificación: 25 Abril 2014, 07:09 am por Eleкtro » En línea

precambrico

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Necesito ayuda con un script que modifique un archivo xml
« Respuesta #2 en: 4 Mayo 2014, 19:31 pm »

Muchas gracias, por contestar, voy a probarlo y te cuento.

Un saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines