domingo, 19 de septiembre de 2010

Subir archivos a través de FTP de forma automática y programada


Hace unos días se me presentó un pequeño inconveniente para ayudar a un cliente. Él usa Filezilla para conectarse y subir archivos a través de FTP, pero necesitaba que la subida de archivos se realice diariamente a una hora específica y de forma automática. Filezilla no presenta esta opción, así que comparto la solución, a quien pueda serle de ayuda.

En resumen, la solución consta de 3 pasos y consiste en crear dos archivos .bat y una tarea programada en Windows que ejecute uno de ellos.

Paso 1. Crear archivo de conexión FTP y subida de archivos: ftpcarga.bat

Abres tu bloc de notas,copias el código de abajo, lo personalizas según tu "situación" y cuando lo guardas le das de nombre ftpcarga.bat.

open hostftpdetudominioejemplo:ftp.tudominio.com
tunombredeusuarioftp
tupasswordcorrespondiente
lcd c:\RutaDeCarpetaDeOrigenLocal
cd RutaDeCarpetaDestinoRemotoEnElServidor
put archivoquesubiré1
put archivoquesubiré2
put archivoquesubiréN
bye

Paso 2. Crear archivo que ejecute ftpcarga.bat: ejecutar.bat

El archivo ftpcarga.bat requiere ser ejecutado por otro. Entonces, abres tu bloc de notas,copias el código de abajo,  y cuando lo guardas le das de nombre ejecutar.bat. Guárdalo en la mismca carpeta que el otro archivo ftpcarga.bat

ftp -s:ftpcarga.bat
exit

Paso 3. Crear una nueva tarea programada

Para los que cuentan con XP, se van a Inicio / Accesorios / Herramientas del Sistema / Tareas Programadas. Crean una nueva tarea, buscan el archivo ejecutar.bat que es el que debe ser ejecutado, configuran si la tarea quiere ser diaria, la hora, etc.

Y listo, en 03 simples pasos configuras la subida de tus archivos a través de FTP de forma automática y programada.



24 comentarios:

  1. HOla, me parece muy útil Acabo de probarlo y funciona de maravilla. Ahora, lo que necesito es que el archivo se llame dinámicamente. Por ejemplo, debo subir datos diarios con distinto nombre de archivo dependiendo del dia, por ejemplo archivo17112010.xls, mañana el archivo18112010.xls. Puedo especificar nombre de archivo dinámico?

    ResponderEliminar
  2. Hola gracias por escribir. No he tenido tiempo para pruebas, pero tú puedes probar capturando datos de la fecha (día, mes, año) del sistema y poner estas "variables" como nombre de tus archivos. Así estos tomarían distintos nombres cada día dependiendo de la fecha.

    Revisa el enlace como guía, aunque en él hablan de carpetas:
    http://www.speedguide.net/articles/how-to-backup-using-batch-files-1547

    Me cuentas.

    ResponderEliminar
  3. Hola buenas. Muchas gracias por compartir esta información. Funciona OK!, pero tengo una duda...¿Habría alguna manera de mover el archivo en vez de copiarlo con put? y no me vale copiar y luego borrar porque en ese intervalo de tiempo puede aparecer un archivo que no se haya copiado. Gracias!

    ResponderEliminar
  4. Hola, estoy probando esta forma para realizar una carga de un archivo a un ftp. y no me funciona, que podra ser??

    ResponderEliminar
  5. ola gracias por el tutorial
    pero el comando open de donde proviene
    ya que me encuentro executandolo de windows 7
    y no lo reconoce

    ResponderEliminar
  6. open hostftpdetudominioejemplo:ftp.tudominio.com

    esta linea es = ftp direccion IP

    ResponderEliminar
  7. Esta muy bueno sobre todo de lo minimo de codigo usado.
    alguien me puede ayudar con la conexion cifrado con FTP explicito TLS

    ResponderEliminar
  8. Hola! una duda con esta linea:
    open hostftpdetudominioejemplo:ftp.tudominio.com

    se puede conectar usando solo la ip?

    ResponderEliminar
  9. Hola Javier Fernando, se puede utilizar poniendo directamente la IP sin el puerto tipo "open 192.168.1.1".

    Mi duda es la siguiente, he creado el script y funciona perfectamente en windows XP pero en un windows server 2003 standar R2 (x64) no funciona, tengo el firewall desactivado pero no hay manera, el script falla en la primera linea que es la conexión con el FTP. Sabrian orientarme sobre el porque de esto?

    Gracias y un saludo

    ResponderEliminar
  10. Hola, enhorabuena por tu artículo. Te queria hacer una consulta. Me es muy importante poder descargar archivos cada cinco minutos en mi web. He segudo todos los pasos que aconsejas, pero soy incapaz. ¿Podrías revisar el código? Te lo agradecería muchísimo:
    archivo ftpcarga.bat:
    open:ftp.bolsapp.es

    m45gu78k4

    gli8eng9

    lcd C:\Users\Salvador\Documents\descargas ftp

    cd bolsapp.es

    put Carteravirtual3011.html

    bye
    archivo ejecutar.bat:
    ftp -s:ftpcarga.bat

    exit

    ResponderEliminar
  11. Quisiera saber si para descargar de FTP de un servidor como seria el .bach

    ResponderEliminar
  12. todos los archivos se envian en modo binario?

    ResponderEliminar
  13. Buenas tardes.
    He probado el script y siempre se queda en el siguiente mensaje:
    150 Opening data channel for file transfer.

    ResponderEliminar
    Respuestas
    1. Hola Carlos, pudiste resolver el problema de 150 Opening ASCII mode data connection.???

      Eliminar
  14. Antge todo pido disculpas por molestar. Estoy intentando utilizar el bat en windows 7 i no me funciona, al ejecutarlo dice que "no se reconoce como comando. Consigo entrar manualmente cada instrucción pero no por lotes. Podria ayudarme?

    ResponderEliminar
  15. Gracias por tu ayuda me sirvió de mucho

    ResponderEliminar
  16. Gracias por tu ayuda me sirvió de mucho

    ResponderEliminar
  17. onde estou errando? alguem pode me ajudar.

    open nomedoservidor.com.br
    usuariodoservir
    senhadoservidor
    lcd C:\Users\thiago.santos\Downloads\thiago\thiago
    cd thiago
    put thi1.txt
    bye

    ResponderEliminar
  18. onde estou errando? alguem pode me ajudar.

    open nomedoservidor.com.br
    usuariodoservir
    senhadoservidor
    lcd C:\Users\thiago.santos\Downloads\thiago\thiago
    cd thiago
    put thi1.txt
    bye

    ResponderEliminar
  19. onde estou errando? alguem pode me ajudar.

    open nomedoservidor.com.br
    usuariodoservir
    senhadoservidor
    lcd C:\Users\thiago.santos\Downloads\thiago\thiago
    cd thiago
    put thi1.txt
    bye

    ResponderEliminar
    Respuestas
    1. open nomedoservidor.com.br
      usuariodoservir
      senhadoservidor
      ascii
      lcd C:\Users\thiago.santos\Downloads\thiago\thiago
      cd thiago
      put thi1.txt
      bye

      Eliminar
  20. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  21. Hola a todoos tenia una grandisima duda, en todos lo ejemplos ke veo solo respaldan un archivo con el comando put, pero qe pasa si yo kiero respaldar toda la carpeta con todos los ficheros internos de la misma carpeta, un ejemplo seria la carpeta mis domumentos y todos su archivos, quiero automatizar mi respaldo pero no me sale ya utilize el comando mput pero no me sube la carpeta completa, lo que ise fue ejecutar comando de windows en la misma sesion ke abro del hosting con el comando "!" que permite utilizar comandos de windows una vez iniciada la session remota hacia el ftp: bueno les dejo mi scrip , cualquier sugerencia es buena:

    ftp open ftp.nombre.com
    usuario
    contraseña
    lcd c:\
    cd \BACKUP
    binary
    !@echo off set dia=%date:~0,2% set mes=%date:~3,2% set year=%date:~6,4%
    !robocopy %userprofile%\Documents ftp:\\ftp.nombre.com\BACKUP\%dia%-%mes%-%year%\ /MAXAGE:1 /S /E /MIR /V /R:3 /W:1 /COPY:DAT /LOG:%userprofile%\Desktop\%dia%-%mes%-%year%
    exit
    bye





    BUENO... como pueden ver trato de ke mi respaldo tambien tome el nombre del dia en el que se iso el respaldo... pero nomas nadaa

    ResponderEliminar
  22. Hola a todos, sé que hace tiempo de éste hilo, pero me encuentro un problema.
    Me copia el fichero excel, csv o txt correctamente pero sin información dentro

    ResponderEliminar