FTPA volte scopro qualche nuova… vecchia parte di Windows 😀
Ho fatto qualche ricerca su Google per imparare a scaricare un file giornalmente, via FTP, e ora so che Windows ha un piccolo client FTP (chiamato, con grande fantasia, ftp.exe) che può fare tutto quello che fanno i “normali” client FTP come FileZilla o CuteFTP.

Non ha una interfaccia grafica, l’unico modo per utilizzarlo è da linea di comando, e quindi è perfetto per essere pianificato, per eseguire compiti ripetuti. Ecco come ho programmato Windows per soddisfare la mia esigenza:

– Ho creato un file di testo con il seguente contenuto (l’ho poi rinominato “ftp.bat“)
@ECHO OFF
echo open ftp.mydomain.com >> D:\Backup\script.txt
echo mylogin >> D:\Backup\script.txt
echo mypassword >> D:\Backup\script.txt
echo lcd D:\Backup >> D:\Backup\script.txt
echo prompt >> D:\Backup\script.txt
echo mget %DATE:~8,2%%DATE:~3,2%%DATE:~0,2%*.psc >> D:\Backup\script.txt
echo bye >> D:\Backup\script.txt
echo ftp -s:D:\Backup\script.bat >> D:\Backup\script.txt

C:\WINDOWS\system32\ftp.exe -s:D:\Backup\script.txt
del D:\Backup\script.txt
exit

Questo script si connette a ftp.mysite.com (cambiate semplicmente l’indirizzo con quello di qualsiasi altro server FTP), invia login e password, cambia (con “lcd”) la cartella di lavoro locale in D:\Backup e disabilita il prompt per evitare richieste di conferma;

quindi scarica (mget) un file con nome variabile, ad esempio 060725050315.psc (questo è il backup giornaliero che volevo scaricare). Il mio problema aggiuntivo era che conosco la prima parte del nome del file (060725… è la data di oggi!) e la sua estensione (.psc), ma non l’ora (nell’esempio, 050315), perchè indica l’ora in cui il backup remoto è stato completato. Quindi ho utilizzato un piccolo script batch di Windows che estrae l’anno, il mese e il giorno (DATE:~8,2, DATE:~3,2 e DATE:~0,2) dall’ora locale del sistema (in formato italiano, GG/MM/AAAA), quindi un carattere jolly “*” e l’estensione fissa.
Quindi sono sicuro di scaricare sempre il/i backup giornaliero/i, a prescindere dall’ora…

alla fine, si disconnette (“bye”).

A causa del problema della data variabile (vedi sopra), l’intero script scrivere per prima cosa i comandi FTP aggiornati in un file temporaneo (D:\Backup\script.txt), e quindi chiama ftp.exe con il nuovo file .txt come argomento. Infine, cancella il file di testo.

L’ultimo passo che ho fatto è stato di aggiungere il mio file .bat alle operazioni pianificate di Windows, per eseguirlo ogni giorno, alle 5.15 del mattino 😉

12 comments on “FTP da linea di comando in Windows XP

  • Ottimo articolo, era da tempo che cercavo un modo per scrivere batch tramite il client ftp di windows 🙂

  • Ciao Riccardo
    ottimo articolo veramente.
    Io dovrei fare la stessa cosa verso un server ftp che lavora sulla porta 5000 per cui utilizzo un client ftp con il passive mode.
    Con questo tipo di versione il comando ftp -s non viene riconosciuto.Tu sai indicarmi qualche client ftp per le mie esigenze ? Ciao e grazie
    Luigi

  • l’idea è molto carina. ho però un problema di connessione. Ovvero sebbene una connessione manuale funziona. messo in un sistema automatico come il tuo, il server remoto mi rifiuta il login. Probabilmente perchè riceve user e password ad una velocità “non umana”
    come potrei risolvere?

  • non credo che sia legato a questo, dario: l’esecuzione del file batch avviene, per quanto ne sappia, in maniera sincrona, quindi ogni comando attende che il precedente venga completato.

  • e’ possibile anche fare il download di una cartella con lo script da te mesionato?…ho necessita di “Downloadare” via FTP delle cartelle…ad un orario ben stabilito…3 di notte…non ho la possibilita di acquistare un client FTP che schedulato fa il lavoro…grazie anticipatamente

  • Per Dario e Enrico
    Nel file batch bisogna eliminare lo spazio fra i comandi ftp l’eco sullo scprit:
    non
    echo mylogin >> D:\Backup\script.txt
    echo mypassword >> D:\Backup\script.txt
    echo lcd D:\Backup >> D:\Backup\script.txt
    echo prompt >> D:\Backup\script.txt
    ma
    echo mylogin>> D:\Backup\script.txt
    echo mypassword>> D:\Backup\script.txt
    echo lcd D:\Backup>> D:\Backup\script.txt
    echo prompt>> D:\Backup\script.txt

    come indicato sul sito microsoft per ftp il file di script non deve contenere spazi, è per questo che non viene riconosciuto user e password.

    non ho capito il significato della linea:
    echo ftp -s:D:\Backup\script.bat >> D:\Backup\script.txt
    nel file batch.

  • Defnitivo! leggevo questo thread e siccome qualche giorno fa ho dovuto risolvere lo stesso problema ho realizzato il seguente batch… a me funziona egregiamente, noterete che l’autenticazione viene ripetuta due volte xchè il client ftp la prima volta lo ignora; lanciate il comando senza nessun parametro e vedrete la sintassi con la quale utilizzarlo.

    @ECHO OFF

    :: ——————————————————
    :: Controllo se sintassi comando corretta
    :: ——————————————————
    IF “%1″==”” GOTO Sintassi
    IF “%2″==”” GOTO Sintassi
    IF “%3″==”” GOTO Sintassi
    IF “%4″==”” GOTO Sintassi

    ECHO Trasferimento ftp in corso… attendere..

    :: echo %1
    :: echo %2
    :: echo %3
    :: echo %4
    :: pause

    :: —————————————————————-
    :: Imposto drive/dir locale dove si trova il file da trasferire
    :: —————————————————————-
    %2
    CD %3
    :: ——————————————————

    :: ——————————————————
    :: Creo file da dare in input a ftp .exe
    :: ——————————————————
    > script.ftp ECHO USER mylogin
    >>script.ftp ECHO %1
    >>script.ftp ECHO USER mylogin
    >>script.ftp ECHO %1
    >>script.ftp ECHO cd /remotedir
    >>script.ftp ECHO ascii
    >>script.ftp ECHO prompt n
    >>script.ftp ECHO put %4
    >>script.ftp ECHO quit
    :: ——————————————————

    :: ——————————————————
    :: Lancio comando ftp .exe per trasferimento sul web
    :: ——————————————————
    FTP -v -s:script.ftp ftphost > NUL
    :: ——————————————————

    ECHO Trasferimento ftp completato..

    :: ——————————————————
    :: Sovrascrivo file temporaneo prima di eliminarlo
    :: ——————————————————
    TYPE NUL >script.ftp
    DEL script.ftp
    :: ——————————————————

    GOTO Fine

    :Sintassi
    ECHO Uso: %0 password drive dirname filename
    PAUSE

    :Fine
    EXIT

    n.b. – tutti i parametri vanno passati as BAT, attenzione a sostituire correttamente i segnaposti mylogin, remotedir e ftphost. Nel caso specifico il batch effettua una put (upload) ma ad adeguarlo per fargli fare un download (get) è un gioco da ragazzi.

    CIAO!!! tested OK

  • ho un problemino quando faccio put si blocca, nel cmd mi scrive STORE file non completa e non da errori, nel server appare il file di 0k

    questo è il mio codice:
    bat:

    C:\WINDOWS\system32\ftp.exe -n -d -s:ftpauto.txt

    txt:

    open ftp . utenti . lycos . it
    user mio_utente mia_pass
    ascii
    put “percorso file”
    bye

    ho già provato put, mput e send sia in ascii che binary, stesso risultato, dove sbaglio?? vi prego aiuto!

  • scusate ma se volessi limitare la banda in download a 3 Kbit/s??

    in tutta la rete non riesco a trovare nulla che spieghi come fare

  • Ciao a tutti.io ho il seguente problema:
    come faccio a passare la porta? Utilizzo un dns dinamico e ho impostato il router in modo da girare il traffico che arriva sulla porta x alla porta 21 del mio indirizzo interno. Mi spiego meglio: col client inserisco il ddns con la porta: mioddns.dlinkddns.com:10021 poi il mio router reinoltra il tutto all’indirizzo interno della mia NAS sulla porta 21.
    Ma come faccio ad integrarlo nel vostro batch? non trovo come inserirgli la porta (non posso ruotare la porta 21 del router…)
    Grazie

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.