Verificador de archivos enviados a un ftp

Iniciado por morenochico, 5 Agosto 2008, 02:06 AM

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

morenochico

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.


@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

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.


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.

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.

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.

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


set /P aqui=<local.txt
set /p alla=<en_ftp2.txt

Pongo el nombre del archivo que quiero enviar en variables.


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.