Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: morenochico en 5 Agosto 2008, 02:06 am



Título: Verificador de archivos enviados a un ftp
Publicado por: morenochico en 5 Agosto 2008, 02:06 am
Hola a todos. Aqui les dejo un code sencillo que sube varios archivos a un servidor ftp. El detalle es que sube de uno por uno y verifica que el archivo este en el servidor. Pude haberlo hecho mas sencillo pero como el servidor maneja muchos archivos y a su vez varios usuarios, no es buena idea sacar un listado para luego compararlos.

El problema es que es demasiado lento debido a la forma que esta hecho, la lentitud no es problema cuando son 10 o 20 archivos, pero si cuando son 2000 o mas.  El punto es si alguen tiene una idea como hacerlo mas eficiente siguiendo la idea de veririficar que el archivo realmente este en servidor ftp. A su vez creo que puede servirle a alguien.


Código:
@echo off

:CONTANDO
set /A contador=0
FOR %%x in (*.HTML, *.GIF *.jpg, *.asp) DO set /A contador=1+contador
echo .
echo .                    ____________________________________________________
echo                      tienes %contador% archivos para subir
echo .                    ____________________________________________________
echo .
pause > nul

:ENVIA

set /A conta=0
set /A movidos=1

FOR %%x in (*.HTML, *.GIF *.jpg, *.asp) DO (
 echo open mi_sitio_ftp         >  manda.ftp
 echo user usuario pasword      >> manda.ftp
 echo put %%x                   >> manda.ftp
 echo ls %%x                    >> manda.ftp
 echo quit                      >> manda.ftp
 ftp -v -n -s:manda.ftp > enviados.txt
 FINDSTR /E /I %%x enviados.txt > en_ftp2.txt
 echo %%x > local.txt
 call :COMPARA
 )

:COMPARA
set /P aqui=<local.txt
set /p alla=<en_ftp2.txt
if %aqui%==%alla% (
set /A movidos=1+%movidos%
echo  %movidos%/%contador%   -- %alla%  Archivo enviado correctamente
) ELSE (
if not %aqui%==%alla% DO (

echo          %aqui%  NO SE HA PODIDO ENVIAR. REVISA SI NO HAY PROBLEMAS DE COMUNICACION
)
goto :eof
echo total de archivos enviados               %movidos%
echo total de archivos que deberian enviarse  %contador%

Un poco de explicacion

Código:
FOR %%x in (*.HTML, *.GIF *.jpg, *.asp) DO ( 
Bueno aqui no hay mucha ciencia puesto que solo hago un ciclo for para los archivos con extensiones mencionadas. Lo importante es que la variable es la x que va tomando el valor del nombre del archivo segun se va recorriendo la lista en el directorio y las veces que se repiten las instrucciones de abajo.

Código:
 echo open mi_sitio_ftp         >  manda.ftp
 echo user usuario pasword      >> manda.ftp
 echo put %%x                   >> manda.ftp
 echo ls %%x                    >> manda.ftp
 echo quit                      >> manda.ftp

Puesto que segun yo no se pueden mandar variables a una conexion ftp, para cada archivo a subir creo un archivo de instrucciones ftp.

Código:
 ftp -v -n -s:manda.ftp > enviados.txt
Aqui abro una conexion ftp para cada archivo y mando la salida del comando a un archivo de texto.

Código:
 FINDSTR /E /I %%x enviados.txt > en_ftp2.txt
Busco el renglon donde esta el nombre del archivo en cuestion y a su ves lo mando a otro archivo, para tener en un archivo el nombre del documento que busco y que se supone esta en el servidor ftp.

Código:
 echo %%x > local.txt
Mando el nombre del documento que el ciclo for esta intentando enviar en ese momento a un archivo temporal.

Código:
set /P aqui=<local.txt
set /p alla=<en_ftp2.txt
Pongo el nombre del archivo que quiero enviar en variables.

Código:
if %aqui%==%alla% (
set /A movidos=1+%movidos%
echo  %movidos%/%contador%   -- %alla%  Archivo enviado correctamente
) ELSE (
Hago una comparacion de los archivos. Si el que estoy tratando de enviar se encuentra en el servidor solo incremento un contador para poder comparar al final cuantos archivos tengo y cuantos se subieron realmente.

Bien como les dije es sencillo pero pude servirle a alguien y creo tambien que alguien tendra una idea para hacerlo mas eficiente.