El Blog de Gualtrysoft

Windows 2000/2003/2008, Active Directory, VBScript, Hyper-V, PowerShell y todo aquello interesante a la hora de usar, configurar y administrar Windows Server. También tenemos longanizas…

Cómo Acceder A Un Servidor FTP Desde Un Fichero BAT

Posted by urpiano en viernes 23 \23\+01:00 noviembre \23\+01:00 2007

Este tip no pretende ser una novedad ni nada original, pero bueno, buscando en el baúl de los recuerdos, he visto esta respuesta que di en su día en el grupo de noticias de Windows 2000 de los grupos públicos de Microsoft y me ha apetecido publicarla; tal cual fue, la pego a continuación:


Puedes lanzar el FTP de forma automática creando una tarea programada que llame a un BAT que contenga la línea:

ftp -s:script-ftp.txt ftp.servidor.com

El fichero script-ftp.txt contiene los comandos FTP que se ejecutarán. Por ejemplo, imagina que el usuario que se conecta es «theoden» y su contraseña es «yijarohan», que quieres subir el fichero «muerte_al_orco.kill», situado en local en el directorio «c:\aliados\gondor» al directorio «pelennor» y que lo quieres subir como binario, para a continuación cerrar la conexión y terminar con ftp. En script-ftp.txt pondrías algo así:

theoden
yijarohan
binary
cd pelennor
lcd c:\aliados\gondor
put muerte_al_orco.kill
close
bye

67 respuestas to “Cómo Acceder A Un Servidor FTP Desde Un Fichero BAT”

  1. Guille said

    Muy util… gracias :)

  2. jackson said

    jajaja

  3. hail said

    lo hago pero no consigo que conecte donde a de estar el fichero que contiene las ordenes, parece que no lo encuentra

    gracias

  4. urpiano said

    Hail,

    Pon la ruta completa a donde esté el script; si por ejemplo está en c:\scripts\ftp, pon:

    ftp -s:c:\scripts\ftp\script-ftp.txt ftp.servidor.com

    Si la ruta y/o el nombre del script contiene algún/os espacio/s, debes encerrarlo entre comillas:

    ftp -s:"c:\Esta es la carpeta\script-ftp.txt" ftp.servidor.com

  5. Juan said

    Excelente!! despues de tanto buscar encontre aqui lo que buscaba

  6. Damian said

    y para bajar archivos? … gracias…

  7. urpiano said

    Damian,

    Pues igual que si estuvieses usando el ftp de forma interactiva; por ejemplo, podemos añadir que el script baje el fichero armas-secretas-de-orco.doc:

    theoden
    yijarohan
    binary
    cd pelennor
    lcd c:\aliados\gondor
    put muerte_al_orco.kill
    get armas-secretas-de-orco.doc
    close
    bye

  8. daduni said

    muy bueno eso era lo que necesita…. gracias

  9. Legolas said

    Urpiano, ni cuando vencimos a los uruk hai en el abismo de helm me senti tan contento como la ayuda que me brindaste para acceder a un servidor via ftp desde un fichero bat.

    Tambien lo agradecen Aragororn y Gimli

  10. David florenciañez said

    y como se podria hacer uno parecido pero con linux?

  11. urpiano said

    David Florenciañez,

    En el caso de linux, tienes que crear el fichero y pasarselo a FTP por redirección. Según el ejemplo anterior, crearías el script /home/script.ftp:

    open http://ftp.servidor.com
    theoden
    yijarohan
    binary
    cd pelennor
    lcd c:\aliados\gondor
    put muerte_al_orco.kill
    get armas-secretas-de-orco.doc
    close
    bye

    Una vez creado este script, para ejecutarlo, desde bash o el shell que tengas abierto pones:

    ftp < /home/script.ftp

  12. Morgan said

    Está genial, es lo que buscaba.
    Una duda, ¿si necesito bajar varios archivos? Sé se van a llamar todos igual, pero con la extensión diferente xxxx.000, xxxx.001, etc…? He probado con get xxxx.* y no funciona.
    Además, me interesaría cortar los ficheros y no sólo copiar.
    Gracias de antemano.

  13. Jordi said

    He estado buscando durante muchos dias, y al final me encuentro este pequeño script, que a la vez que simple, es genial.
    Grácias

  14. roberto said

    y como puedo eliminar los archivos que esten en el server

    • urpiano said

      Roberto,

      supongo que tu problema es que te pide confirmación al borrar los ficheros. Para evitar esto, ejecuta el comando prompt antes de intentar los borrados. Este comando establece que se pida o no confirmación, de forma predeterminada se pide. Es un comando de tipo toggle, es decir que al ejecutar invierte el valor establecido; así pues, si una vez establecida la sesión ejecutas este comando, se desactivará el pedido de confirmaciones, si lo vuelves a ejecutar se volverá a activar, si lo ejecutas otra vez se desactiva, y así sucesivamente.

  15. marco said

    me funciona todo bien… pero si quiero direccionarlo a una puerto especifico

    salu2— de grand ayuda

  16. deto said

    Buenas. El método me parece genial, pero a mi solo me aparece en consola de MSDOS, repetido indefinidamente, el texto que escribo en el archivo .BAT:

    ftp -s: f:\datos.txt 82.172.45.123

    En el archivo datos.txt de la unidad f: escribo el usuario, la contraseña y el resto de comandos…

  17. marco said

    no pude direccionarlo a un puerto especifico, pero me funciono de la siguiete forma:

    en el backup.bat:
    ftp -s:quotas.txt 192.168.14.8

    en el quotas.txt:
    dominio\usuario
    password de usuario
    binary
    cd Respaldo_Quotas\folder (cd abre la carpeta y guardara el archivo en folder)
    put BackupQuotas.extension del archivo
    quit
    —–

    salu2

  18. Pedro said

    Tengo un problema, quiero ejecutar un .bat desde una macro de excel (VBA) en la cual me levante un archivo especifico desde el FTP. Si este script lo ejecuto desde el explorador, me levanta sin problemas el archivo, pero si lo ejecuto en la macro, no lo hace. Alguien me puede dar un mano. Gracias. Les paso las lineas de codigo de la macro.

    App = Shell(«»»c:\FTP\COP\» & arch & » «»», vbMaximizedFocus)
    — el archivo arch = FTP_Genera_955.bat
    — el archivo FTP_Genera_955.bat contiene «ftp -s:c:\FTP\COP\FTP_Genera_955.txt 10.94.164.7»
    — el archivo FTP_Genera_955.txt contiene
    ftpde955
    xxxxxx

    bin
    mget 0955pedidos_por_puntos_p94jefse_*.txt

    quit

  19. urpiano said

    Pedro,

    ¿Qué valor te devuelve App después de la ejecución?

  20. urpiano said

    Pedro,

    ¿Has probado a poner esto otro a ver si funciona?

    App = Shell(«cmd /c «»c:\FTP\COP\» & arch & «»»», vbMaximizedFocus)

  21. Nahuel said

    Muchas gracias por la info, la verdad me vino como anillo al dedo.
    Saludos.

  22. lucas said

    Hola, el script anda de 10 pero siempre corre desde el c: nuestro.
    ftp -s:(que corra desde un servidor web) http://ftp.servidor.com
    se podrá hacer?
    gracias

  23. martin said

    Perfecto, simple, facil y funciona!!!!

  24. javier said

    oye si funciona muy bien pero como le hago
    para subir n cantidad de archivos sin estar
    escribiendo el nombre del archivo que deseo
    subir

  25. Jaime said

    Hola,
    Muchas gracias por el Script! funciona de maravilla.
    Lo estoy utilizando para hacer un backup de archivos a un disco FTP, y tengo un par de dudas
    ¿Si encuentra en el servidor un archivo del mismo nombre, PUT sobreescribe el archivo? ¿pregunta?
    ¿Cómo puedo hacer para que sólo sobreescriba aquellos archivos en los que el origen es más reciente que el destino?
    Un saludo y muchas gracias

  26. Ijalba said

    Para coger un grupo de ficheros por FTP se usa mget (para subirlos mput)

    Con lo que, para coger todos los ficheros .log haríamos un:

    mget *.log

    Para que no nos pregunte por cada archivo si queremos bajarlo o no, podemos invocar a ftp con la bandera de ignorar mensajes interactivos:

    ftp -i hostname.

    Un Saludo.

  27. matias said

    hola. Estoy haciendo uns script que conecta a un ftp. Mi pregunta es….si no se puede conectar al ftp por X motivo, vuelve a intentar conectarse?hay alguna forma de ponerle que si no puede conectarse intente hasta que se conecte y siga con el resto del script? Desde ya muchas gracias muy util su informacion

  28. urpiano said

    Matias,

    Eso no es posible, pues los bat son procesos que se ejecutan de forma síncrona, esto es, hasta que un comando no termina, no empieza el otro. Sí podrías hacer que reintentase una y otra vez, poniendo el bloque de conexión a FTP en una etiqueta y comprobando si ha habido error, en cuyo caso se volviese a ejecutar el bloque por medio de una llamada a GOTO a esa etiqueta, pero no podrías hacer que se ejecutasen otras cosas mientras lo está intentando.

  29. matias said

    Muchas gracias Urpiano por tu información. Si eso es lo que me refería yo, que intentase una y otra vez hasta que se conecte y cuando se pueda conectar ahi que siga con el resto del script. Una molestia mas…. podrías ponerme un ejemplo de como sería el script con la etiqueta que mencionas y con la llamada GOTO? y ademas como hacer para que se ejecute el script constantemente en un loop de 5 segundos? es decir….. luego de que el script termine, espere 5 segundos y se vuelva a ejecutar y asi sucesivamente. Espero tu respuesta y nuevamente Muchas Gracias por tu información. Me está siendo de mucha ayuda

  30. urpiano said

    Matias,

    Por desgracia, no va a funcionar, pues FTP no da error cuando no conecta a un sitio FTP, simplemente se abre sin haber conectado, intenta los comandos del fichero, que dan error, y termina con bye, y para CMD no se ha producido un error: la forma de hacer lo que te decía no funcionará. No obstante, te hago una muestra por si te vale para otro caso:

    :ftp
    ftp -s:script.txt http://ftp.sitio.com
    if errorlevel=1 goto ftp

  31. Jose Jose said

    estimados colegas,

    este codigo ya lo tenia programado y funciona de maravilla, pero necesito su apoyo, necesito saber como poder, una vez conectado al FTP, obtener los siguientes datos de un archivos del FTP:

    – fecha y hora de creacion del archivo

    hay algun comento FTP que permita obtener estos datos? o de lo contrario como insertar comandos VBScript en el txt con comandos FTP se peude hacer esto? y si alguno sabe porfavor indiquenme como hacerlo!!

    muchas gracias desde ya

  32. Frank Aldape said

    miren lo quiero hacer un bat que de de las siguientes funciones:
    suba informacion de archivos .pdf y .xml dependiendo del mes de su creacion a un servidor ftp con usuario y password. Sin tener que poner que se guarden.
    Si me pueden ayudar

  33. mamalon74 said

    hola hermano hice el siguiente bat se conecta al ftp pero no me deja ningun archivo

    user
    pass
    cd xml (esta carpeta no me la ecuentra) o al menos eso me dice
    lcd D:\INRVS
    put viajesconf*.csv (tengo muchos archivos *.csv pero quiero pasar todos los que empiecen con VIAJESCONF
    quit

    la bronca es que me meto desde otra maquina por medio del filezilla al ftp no y no deja ningun archivo

  34. mejme said

    Muchas Gracias por el aporte fue de mucha utilidad.

  35. Fede said

    Buenas a todos, gracias de antemano.
    Como hago si necesito que mantenga la estructura de directorios??

    Ej: Si voy a descargar la carpeta llamada «1», que adentro tiene mas carpetas, necesito que mantenga esa estructura…

  36. Fernando said

    Yo para scripts, ya sean CMD, PHP o AutoIt, utilizo NcFTP (http://www.ncftp.com/) que tiene maravillosas utilidades como ncftpput, ncftpls, ncftpget…
    Me suelo bajar el paquete para Win, lo descomprimo (no lo instalo) y me pillo los tres o cuatro ejecutables que no necesitan ni dll ni nada y listo.

    Saludos

  37. Cryptklok said

    Tengo una duda con mi codigo:

    @echo off
    Rar a -r -ed %UserProfile%\%USERNAME%_%COMPUTERNAME% %UserProfile%\Roller
    set servidor=<>
    set user=<>
    set pass=***********
    set arch=%UserProfile%\%USERNAME%_%COMPUTERNAME%.rar
    echo %user%>>000
    echo %pass%>>000
    echo bin>>000
    echo put %arch%>>000
    echo close>>000
    echo bye>>000
    ftp -s:000 %servidor%
    del 000
    del %arch%
    exit

    Lo que pasa es que si sube el archivo rar al ftp, pero cuando lo descargo y lo descomprimo me sale un error de CRC y me dice Final inesperado del archivo. Lo curioso es que cuando elimino la linea «del %arch%» y abro el archivo creado si lo descomprime normal y también si lo subo mediante FileZilla, por lo que supongo que algo anda mal con el código para subir al ftp. Espero que alguien me pueda ayudar :/

    • urpiano said

      Me da la impresión de que el problema es que el ftp es procesado de forma asíncrona, de manera que cuando se borra el rar todavía está subiendose. Yo probaría a no borrar el rar después de subirlo, si no que se le deja ahí y lo primero que hace el bat es borrar el rar de la ejecución anterior.

  38. Emilio said

    gracias.

  39. Gustavo C. said

    Que tal tengo un problema, espero me puedan ayudar. Lo que necesito hacer es que mi .bat descargue desde un FTP el útlimo archivo de acuerdo a la fecha de creación, por ejemplo tengo los siguientes archivos:

    DCOLDATA040800.txt (Archivo con fecha del 8 de Abril)
    DCOLDATA052300.txt (Archivo con fecha del 23 de Mayo)
    DCOLDATA061200.txt (Archivo con fehca del 12 de Junio)
    DCOLDATA061300.txt (Archivo con fecha del 13 de Junio)
    DCOLDATA061400.txt (Archivo con fecha del 14 de Junio)

    Por ejemplo el día de hoy sólo necesito descargar el archivo DCOLDATA061400.txt, pero el día de mañana se creará uno nuevo con la fecha del 15 de junio ejmeplo:DCOLDATA061500.txt el cual sería el único que descargaría al día siguiente y así sucesivamente.

    Como puedo hacer estas instrucciones???

    Agradezco su atención

  40. harry said

    Excelente me funciono a la primera…gracias

  41. jose luis said

    bunas necesito ayuda no me funciona el script…

    lo que necesito hacer es crear un .bat que me copie una base de datos y luego me lo comprima en un .RAR para mandarlo al FTO…

    hasta el momento me funciona perfecto la parte de copiar y comprimir pero cuando se ejecuta la linea del ftp solo me aparece en la consola un listado como de ayuda y de las funciones del http://ftp…no se conecta al servidor ni nada…

    de antemano muchas gracias espero me puedan ayudar

  42. Mi script estaba corriendo muy bien, solo que ha dos semanas dejo de funcionar haciendo prbas me dicuenta que no esta tomando en cuenta la linea del password, y me devuelve el ensaje de «331 password required for User», alguien tiene una idea de que puede estar pasando

  43. cristian said

    Hola, hize todo igual que tu y al abrir el comando
    ftp -s: host
    me sale un bucle

  44. cristian said

    es decir pongo ftp -s:archivo.txt (el host)
    y me sale un bucle de cmd en cada uno pone lo mismo

  45. junior said

    este es el archivo bat
    @echo off
    ftp -s:ftp.txt 127.0.0.1

    este el archivo http://ftp.txt

    junior
    junior
    get «tu poeta.mp3»
    close
    bye

    lo que pasa que e simulado mi computadora como un servidor ftp pero al ejecutar el archivo .bat no logro connectarme ambos archivos estan en el msimodirectorio

  46. CarlosKaya said

    Mi .bat de ftp funciona bien, el problema esta en que necesito trabajarlo pasando un parámetro, sino tendría que tener un archivo por cada directorio, la cuestión es que cuando paso el parámetro me genera error y no hace nada.

    @echo off
    @ftp -i -s:»%~f0″&GOTO:EOF
    open 200.74.223.154
    acctupper
    IpH3kQ#=-Ouk~
    !:— Comandos FTP para pasar de Windows (T33) a TupperNet —
    !:— c:\tmp es el Directorio de Windows (T33) donde estan los archivos de Credito/Cobros —
    cd /opt/tmp/dist/%1%/envio_planta
    lcd \\ven1erp03\ERPFTP\DDD\Pruebas
    binary
    mget «*.unl.*»
    disconnect
    bye

    • urpiano said

      CarlosKaya,

      Me parece muy ingenioso eso que haces, pero me temo que no funcione, pues cuando se está leyendo el BAT como script de FTP no creo que %1% sea cambiado al valor que tendría en el bat (por cierto, que sobraría el tanto por ciento de la derecha, pues los parámetros sólo se referencian con el tanto por ciento de la izquierda; son las variables que establezcas con SET (o las de entorno) las que se referencian encerradas entre tantos por ciento.

      Se me ocurre que lo que puedes hacer es generar el fichero desde el bat, invocarlo y destruirlo, algo así:

      @echo off
      echo open 200.74.223.154 > "%0\..\tempftp.txt"
      echo acctupper >> "%0\..\tempftp.txt"
      echo IpH3kQ#=-Ouk~
      echo !:— Comandos FTP para pasar de Windows (T33) a TupperNet —
      echo !:— c:\tmp es el Directorio de Windows (T33) donde estan los archivos de Credito/Cobros —
      echo cd /opt/tmp/dist/%1/envio_planta >> "%0\..\tempftp.txt"
      echo lcd \\ven1erp03\ERPFTP\DDD\Pruebas >> "%0\..\tempftp.txt"
      echo binary >> "%0\..\tempftp.txt"
      echo mget “*.unl.*” >> "%0\..\tempftp.txt"
      echo disconnect >> "%0\..\tempftp.txt"
      echo bye >> "%0\..\tempftp.txt"
      @ftp -i -s:"%0\..\tempftp.txt"
      del "%0\..\tempftp.txt"
      
  47. unmsm2002 said

    funciona bien pero si el archivo a subir(put) es variable, se genera cada media hora, como hago para enviarle el nombre al put ya que depende de la hora. un ejemplo seria:

    0101ABC00000017420130228080000.dat
    0101ABC00000017720130303075959.dat

    y asi sucesivamente, como puedo colocar un «nombre variable» al put.

  48. Crudelitas said

    Hola alguien sabra como hacer esta conexion de FTP a un servidor por medio de un bat pero con SFTP ??

  49. Pablo said

    Tengo este codigo:
    macropro
    macropro
    lcd ..
    lcd «pdf_mb»
    lcd «2014»
    lcd «01»
    cd /home/macropro/EMP01/cfdxml/2014/01
    pwd
    ascii
    prompt
    mget IFOR******.xml
    bye
    quit

    me baja todos los archivos con extension pdf, pero yo necesito que me baje los mas recientes no que me vuelva a sobreescrubir todos los que ya tengo. ¿Como le hago? Gracias.

  50. Alejandro said

    necesito bajar un archivo .rar desde un ftp por comando cmd o creando un .bat y no tengo contraseña ni usuario. como puedo conectarme al servidor ftp sin tener que poner usuario y contraseña ya que la carpeta a la que necesito conectarme es publica. como puedo crear ese .bat para ejecutarlo como tarea programada

  51. Ramon sanchez said

    Me pueden ayudar como crear el script par descargar archivo de un ftp que varian la fecha por ejemplo:

    20150205_2010_SGCCLI

  52. Blanca said

    quiero saber como definir en el script del .bat la hora de inicio de transferencia de un archivo y la hora fin de dicha transferencia y que se vea refrejada en una bitácora .log

  53. anonimo said

    Gracias Me sirvio para un proyecto

  54. Cesar Pozo said

    Muchas gracias, hace tiempo tenia un ftp por lotes pero lo perdí con el antiguo equipo, no me acordaba como hacerlo, con esta ayuda funciono perfecto:

    creé un archivo que se llama Lanza_ftp.cmd en una carpata : C:\varios\ftp, y otro que se llama get.txt

    http://ftp.cmd contiene el siguiente comando:

    ftp -s:c:\varios\ftp\get.txt servidorftp

    – get.txt contiene lo siguiente:

    usuario_servidor
    password_servidor
    ascii
    get ‘archivo1’ archivo1.txt
    get ‘archivo2’ archivo2.txt
    get ‘archivo3’ archivo3.txt
    close
    bye

    posteriormente solo falta hacer doble clic a lanza_ftp.cmd o por linea de comandos en DOS ejecutarlo y se ejecuta la conexion al servior, la bajada de los archivos y el cierre de la conexion.

    Funciona perfecto……

    De verdad agradezco la ayuda, y ojalá esto que dejo tambien les sirva.

    Saludos a todos y muchas gracias!!!!!

  55. opinion essay

    Cómo Acceder A Un Servidor FTP Desde Un Fichero BAT « El Blog de Gualtrysoft

Replica a Emilio Cancelar la respuesta