Crear .Bat para sincronizar carpeta local con FTP.

bat para sincronizar dos carpetas locales

-------XCOPY /S /D /Y C:\prueba2Ftp C:\prueba3Ftp-----

Pero quiero sincronizar la carpeta C:\prueba2Ftp con una carpeta en un Ftp (FTP.EJEMPLOFTP.COM/carpeta)

¿Cómo seria la conexion en el cmd del ftp con usuario y contraseña y utilizar el XCOPY entre carpeta local y FTP?

2 Respuestas

Respuesta
1

Lo que pretendes automatizar los puedes lograr con la aplicación Winscp, que acepta parámetros desde la línea de comandos; con el siguiente parámetro se puede mantener sincronizada una carpeta local vs una carpeta remota:

winscp.exe [mysession] /synchronize [local_directory] [remote_directory] [/defaults[=secs]]

Enlace de la documentación: 

https://winscp.net/eng/docs/commandlinehttps://winscp.net/eng/docs/commandline

Es un tema muy viejo. Pero a alguien le puede servir en un futuro.

Respuesta

Hasta donde yo sé el ftp no tiene comandos u opciones similares a las /S y /D del XCOPY de modo que lo que se me ocurre es copiar a una carpeta local temporal (digamos c:\carptemp) el contenido de la carpeta FTP.EJEMPLOFTP.COM/carpeta y luego aplicar el procedimiento de sincronización del que hablas entre la carpeta de destino y la carpeta local temporal. Pero el problema es que el ftp no te permite, que yo sepa, copiar carpetas/directorios sino solo archivos, de modo que el /S del XCOPY quedaría sin cubrir.

Si esto último no es muy importante, o podemos dejarlo para una mejora posterior, te sugiero que pruebes esto:

@ECHO off
rd /q /s c:\carptemp
md c:\carptemp
c:
cd \carptemp
 > ftp.txt echo <USUARIO>
>> ftp.txt echo <CLAVE>
>> ftp.txt echo binary
>> ftp.txt echo cd <CARPETAFTP>
>> ftp.txt echo mget *.*
>> ftp.txt echo quit
ftp -i -s:"ftp.txt" <FTPDESTINO> > c:\detalles.log
xcopy /D /Y c:\prueba2Ftp c:\carptemp

<USUARIO>, <CLAVE>, <CARPETAFTP> y <FTPDESTINO> serían el usuario, la clave, el nombre de la carpeta en el servidor FTP y el nombre del servidor FTP respectivamente (sin los <> que he usado para destacarlos).

Si luego tenemos que entrar a tener en cuenta la estructura de subcarpetas puede ser muy complejo, creo, dependiendo del número de niveles que tenga el árbol de carpetas/directorios.

Acabo de caer en la cuenta de que el GET (o MGET) del FTP tampoco respeta la fecha-hora de creación/modificación del archivo original, de modo que tampoco el /D serviría de mucho porque los archivos transferidos tendrán todos la fecha-hora de la transmisión por lo que siempre serían más recientes que los de prueba2Ftp. De modo que no creo que te sirva de mucho esta solución.

Hola que tal, muchas gracias por su ayuda.

Lo que pretendo hacer es pasar los datos de una carpeta ftp a una local,

En esa carpeta solo hay archivos, más no carpetas.

Perdón me equivoque, lo que pretendo es mandar solo los datos de mi carpeta C:/carpeta a la carpeta en un ftp. 

Solo son archivos.

Entonces la cosa parece que no debería dar problemas. No sé si has probado lo que te sugerí pero, en todo caso, prueba esto:

@ECHO off
c:
cd \carpeta
 > ftp.txt echo <USUARIO>
>> ftp.txt echo <CLAVE>
>> ftp.txt echo binary
>> ftp.txt echo cd <CARPETAFTP>
>> ftp.txt echo mput *.*
>> ftp.txt echo quit
ftp -i -s:"ftp.txt" <FTPDESTINO> > c:\detalles.log

Con las mismas convenciones que antes: <USUARIO>, <CLAVE>, <CARPETAFTP> y <FTPDESTINO> serían el usuario, la clave, el nombre de la carpeta en el servidor FTP y el nombre del servidor FTP respectivamente (sin los <> que he usado para destacarlos). El archivo detalles.log sirve para guardar registro de lo hecho y detectar errores si los hubiera. Si al conectarte al servidor FTP ya estás en la carpeta de destino habría que suprimir la línea ">> ftp.txt echo cd <CARPETAFTP>". Si necesitas alguna explicación o hay algo que no funciona no dudes en comentármelo.

Ok lo probare. muchas gracias

Otra ves yo amigo, lo probe tal cual me indicaste pero no funciona :(.

solo se cierra el .bat al ejecutarlo.

@ECHO off
c:
cd \prueba2Ftp
> ftp.txt echo fijiuser
>> ftp.txt echo admin123pass
>> ftp.txt echo binary
>> ftp.txt echo cd pruebaFtp
>> ftp.txt echo mput *.*
>> ftp.txt echo quit
ftp -i -s:"ftp.txt" ftp.fiji.com > c:\detalles.log

donde fiji es el user, admin123pass el la contraseña, pruebaFtp es la carpeta del ftp, ftp.fiji.com es el ftp.

existe algun problema con  los datos?

Veo por aquí que no hacía falta lo que te decía en el otro hilo.

Por cierto ¿el usuario es fiji o fijiuser?

Revisa el detalles.log o ponlo aquí para que podamos ver lo que ocurre.

Lógicamente el destino del ftp tiene que admitir la conexión. He probado a hacerlo manualmente y si tecleo

ftp ftp.fiji.com

Me sale:

Conectado a ftp.fiji.com.
Conexión cerrada por el host remoto.

Esto indicaría que no admite la conexión, con lo que no se podría hacer nada. Supongo que tienes acceso a ese servidor FTP y que podrás

He dejado la última frase sin terminar, quería decir que "podrás cambiar la configuración para que admita la conexión". Tiene que estar en la situación en la que harías una conexión manual con el usuario y la contraseña.

El usuario es fijiuser, ahorita estoy en el ftp en la página principal donde me pide usuario y contraseña.

El .bat no me genera ningún archivo detalles, ya busque en c: y no esta. Ha de haber un problema

A ver si en la carpeta prueba2Ftp existe algún archivo ftp.txt.

Y haz un Type del .bat que hayas creado para esto.

Así es, en la carpeta prueba2Ftp si tengo 2 archivos txt.

¿Dos archivos de nombre ftp.txt? Solo debería haber uno. Haz un type de esos archivos y pon aquí el contenido. Y tambien del .bat que hayas creado.

son 2 archivos con diferente nombre cada 1.

Como hacerle un type?

Abres una consola cmd (Ejecutar -> cmd.exe) y te sitúas en la carpeta c:\prueba2Ftp tecleando:

cd \prueba2Ftp

Luego tecleas

type ftp.txt

¿Cómo se llama el otro archivo txt? Si no es ftp.txt no tiene que ver con el .bat, será que ya estaba en esa carpeta.

Luego te sitúas en la carpeta dónde hayas guardado el .bat. Supongamos que fuera c:\bat y que le has llamado pepe.bat, tecleas

type pepe.bat

Y me pone aquí la captura de los dos type para evitar errores de transcripción.

¿Qué pasó con esto?

Si no me he explicado bien dímelo que intentaré mejorar la explicación. Pero no abandones el asunto que ya casi está conseguido. Si no estás acostumbrado a usar la consola CMD (también llamada "Símbolo del sistema") puedes abrir el ftp.txt y el .bat con el Bloc de notas (Notepad) y copiar aquí el contenido de ambos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas