Trasferimento FTP automatico di file(s) tramite batch

Spesso a lavoro mi capita di dover inviare o ricevere tramite il protocollo FTP uno o più file in maniera rapida, con un click, anzi doppio click. Nel caso di utilizzo di un sistema operativo Windows una soluzione consiste nell’utilizzo di file batch. Per adempiere il nostro lavoro dobbiamo creare due file. Il primo file conterrà i comandi da inviare al server ftp che convenzionalmente chiameremo cmd.ftp, mentre il secondo file sarà il file batch vero e proprio, che eseguirà i comandi iterativamente e che chiameremo ftptransfer.bat

Attenzione non chiamate mai un batch con il nome di un programma che viene richiamato al suo interno, cioè non chiamate per esempio il file batch ftp.bat se all’interno richiamerete il programma ftp, altrimenti rischierete di creare un’esecuzione ricorsiva del batch fino all’esaurimento delle risorse!

Andiamo dunque a vedere il primo file, quello dei comandi ftp:

File cmd.ftp:
[cc lang=”bash”]
user username password
cd /path
bin
hash
get example1.dat
put example2.dat
disconnect
bye
[/cc]

La prima riga invia il comando username che ha come parametri l’username e la password da utilizzare per l’autenticazione. I comandi dalla 3a alla 4 riga non sono obbligatori, nell’ordine eseguono un cd per un cambio di directory sul file system remoto, bin abilita il trasferimento binario, hash permette la visualizzazione di una sorta di progress bar, il comando get server per scaricare sul computer locale un file presente sul server FTP remoto, mentre il suo antagonista put fa l’esatto opposto, cioè invia un file locale sul server remoto. Infine abbiamo disconnect che chiude la connessione con il server ftp, e bye che chiude il programma client ftp.

[banner align=”aligncenter”]

Veniamo adesso al file batch:

File ftptransfer.bat:

[cc lang=”bash”]
@ECHO OFF
echo ————————–
echo Trasferimento FTP avviato
echo ————————–
ftp -n -s:cmd.ftp indirizzo_server
echo ———
echo F I N E
echo ———
pause
[/cc]

Qui non c’è molto da dire se non i vari comandi batch echo che stampano su console delle informazioni, ed il comando ftp seguito da alcuni parametri:
-n disabilita l’autoconnessione dopo la connessione iniziale.
-s:nomefile specifica un file di testo contenente i comandi FTP.

Ecco un esempio:

Da notare il carattere “cancelletto” (hash mark) utilizzato come progress bar dell’avvenuto trasferimento.

11 Comments

  1. Grande soluzione! Funziona! Mi dà problemi sul .ftp quando imposto l’esecuzione del .bat dall’Utilità di Pianificazione di Win..
    Consigili??

  2. Davide che problema ti da ? Prova a verificare la directory di lavoro, quando si utilizzano le operazioni pianificate la directory corrente non è detto che sia quella dove si trovano i file. Potresti per esempio mettere la path assoluta (p.e. c:\programmi\) per il file cmd.ftp all’interno del file .bat

  3. Semplice, pulito e funzionale! Bravo!

  4. Grazie Mariobros 🙂

  5. ciao, provo a spiegarti ciò che mi servirebbe:
    ho creato un file di excel, per tenere sott’occhio le operazioni di trading.
    Il software che utilizzo per il trading, genera un report, in formato html.
    il file di excel estrapola i dati da questo REPORT, e fa i suoi calcoli.
    Io vorrei, che questo REPORT, venisse salvato, in uno spazio web (quando lo creo, mi viene salvato ad esempio nella cartella Downloads, nel mio pc, e da qui in automatico vorrei che venisse spostato nello spazio web(non intendo cloud, ma nel server di un sito creato su altervista.)).
    in parole povere la mia domanda è:
    si può usare il tuo script, in modo che venga attivato automaticamente , quando viene sovrascritto, un certo file?

  6. Si può usare lo script per inviare il file html su un’area ftp, ma non all’evento di modifica del file, per queste esigenze ti serve un programma che monitorizza le eventuali modifiche al file in questione. In questo caso ti consiglio di provare “free file Sync”, è gratuito e sincronizza anche in ftp. In alternativa c’è il CuteFtp ma è a pagamento.

  7. salve, avendo due server ftp e volendo instradare la copia sul server secondario (con porta diversa dalla 21) che comando dovrei dare?

  8. devi usare il comando open dentro il file cmd.ftp (quindi rimuovendo l’ip dal file .bat)
    Per esempio nel file cmd.ftp avrai

    open ipserverftp numporta
    user username password
    ecc…

    La porta si può specificare solo con il comando open e non come parametro dell’eseguibile ftp

  9. Come posso aggiungere dei commenti al file cmd.ftp?
    il classico “;” non funziona….

  10. Prova con rem o # adesso non ho sotto mano un pc windows per prova.

  11. salve. io non voglio lasciare nessun commento in quanto non capisco nulla
    avrei dolo bisogno di un piccolissimo file .bat
    per trasferire dati da una cartella del pc a un supporto collegato tramite usb
    se per favore qualcuno mi può aiutare lascio il mio indirizzo mail
    [email protected]
    grazie a chi mi può aiutare
    Bruno

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.