«

»

Lug 17

Windows : trasferimento FTP automatico con script

ftp_scriptIn Windows è presente da sempre un client FTP utilizzabile dalla riga di comando, è quindi possibile usarlo per collegarsi ad un server FTP per inviare o ricevere files da un server FTP usando questo diffuso protocollo di trasferimento dati.

Il comando è interattivo, nel senso che una volta lanciato dal prompt dei comandi presenta a video una console in cui impartire i comandi e visualizza le risposte del server FTP a cui siamo collegati, è però possibile anche rendere automatico un trasferimento FTP usando un semplice script.

 

La prima cosa da fare è creare il file script in formato testo usando il Blocco Note o qualsiasi altro editor di testo che possa salvare il file in formato testuale Ascii senza formattazione.

Lo script dovrà contenere esattamente gli stessi comandi che avremmo impartito nella nostra sessione FTP con il server con cui dobbiamo scambiare dati, quindi tanto per capirci sarà qualcosa di simile a questo :

open server_ftp
username
password
binary
get /path/filename.ext
quit

La prima riga (open server_ftp) apre la connessione con il nostro server FTP, possiamo mettere sia il nome del server che il suo indirizzo IP.

Nella seconda e terza riga (username, password) specifichiamo il nome utente e la relativa password da usare come login per il collegamento con il server FTP.

La quarta riga (binary) forza un trasferimento binario, in modo che possiamo scaricare dal server FTP qualsiasi tipo di file avendo la certezza che non venga troncato (cosa possibile usando la modalità Ascii che è da utilizzare SOLO per il trasferimento di files di testo).

La quinta riga (get /path/filename.ext) istruisce il nostro client FTP perchè legga dal server FTP il file che si trova nel percorso /path e che si chiama filename.ext e lo trasferisca sul pc locale.

La sesta riga infine (quit) chiude la connessione col server FTP.

Una volta salvato questo script in un file di testo, ad esempio in SCRIPT.TXT lo potremo richiamare da riga di comando con la seguente sintassi :

C:\WINDOWS\SYSTEM32\FTP.EXE  -s:SCRIPT.TXT

In questo modo avremo un trasferimento automatico senza dover interagire in alcun modo con il client FTP di Windows.

Volendo è possibile inserire l’istruzione qui sopra in un file batch (.BAT) da lanciare alla bisogna da riga di comando o da un collegamento sul desktop o addirittura schedularlo a tempo, insomma con un semplice script possiamo automatizzare il trasferimento FTP verso il nostro server nel modo più semplice e veloce.

 

Maggiori informazioni sul client FTP di Microsoft e sui comandi supportati (sono nella colonna di sinistra) sono disponibili a questo link :

https://technet.microsoft.com/en-us/library/ff687787.aspx

 

10 commenti

Vai al modulo dei commenti

  1. Diego Sala

    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?

    1. mario

      Certamente , puoi fare un file batch (.BAT) simile a questo che dovresti schedulare in esecuzione a tempo ogni tot minuti / secondi, oppure mettere in loop continuo con un GOTO :

      rem :INIZIO rem togliere il rem iniziale per avere un loop continuo
      C:
      CD \DOWNLOADS\
      DEL REPORT.OLD
      IF NOT EXIST REPORT.HTML GOTO FINE
      c:\windows\system32\ftp.exe -s:script.txt rem script.txt deve trovarsi in c:\downloads ed avere i comandi per il tuo ftp, cioè il trasferimento di report.html sul tuo spazio web
      REN REPORT.HTML REPORT.OLD
      :FINE
      TIMEOUT 30
      rem GOTO INIZIO rem togliere il rem iniziale per avere un loop continuo

      O simile, vedi tu come personalizzarlo…..

      1. Diego Sala

        grazie per la risposta.
        ma quindi , non si può creare un bat, che verifichi la modifica, o la sovrascrittura, del file report.html?
        se ho capito bene quello che hai scritto(non mastico molto la o ha un altro significato? programmazione), il DEL sta per delete=cancella
        cancella report.old , fa partire il bat che trasferisce il file, e rinomina il nuovo report.html in report.old
        e si ripete ogni 30 secondi(?)
        quello che hai scritto sotto al IF sarebbe il file che hai creato per l articolo giusto?

        1. mario

          Il batch di esempio controlla la presenza del file report.html, se esiste procede con l’ftp sullo spazio web e quindi rinomina il file in report.old in modo che al prossimo giro di controllo non rifaccia l’ftp se non e’ presente un nuovo file report.html in quel percorso, in pratica invece di controllare la sovrascrittura del file controlla la presenza del file, se ti serve una copia del report.html anche in locale puoi cambiare l’istruzione
          REN REPORT.HTML REPORT.OLD
          in
          MOVE REPORT.HTML C:\ALTRADIR\
          in questo modo dopo aver trasferito il file via ftp lo “sposta” invece di rinominarlo in modo che il giro successivo non lo trovi, se no continua a fare dei trasferimenti senza senso.
          Confermo : DEL cancella, e si si ripete ogni 30 secondi, è la variabile TIMEOUT
          Ti conviene fare delle prove, non credo che farai danni….

  2. Gianvito

    Ciao,
    ti chiedo una mano, non so se sia fattibile come cosa.

    Il mio intento è quello di creare qualcosa, uno script o altro che mandi un file txt (che si aggiorna ogni tot tempo) su ftp. Il file txt deve essere creato da un sito web che ha stringhe autoaggiornanti in .json. Cioè io visito questo sito è ho questa stringa di dati. Posso salvarla dal browser in txt o in json.

    Grazie

    1. mdede

      La cosa è fattibile, controlli se sul suo pc Windows 10 è già presente l’utility CURL (basta eseguirla dal prompt dei comandi CMD.EXE), nel caso non fosse presente la scarichi da qui :

      https://curl.se/windows/

      la sintassi per scaricare un file JSON da un sito web è :

      curl.exe -o file.json https://www.sito.it/percorso/file.json

      una volta che ha il file per fare l’upload su un sito ftp i comandi sono (script.txt) :

      open server_ftp
      username
      password
      binary
      cd /percorso
      put file.json
      quit

      quindi può creare un file batch (.BAT) che contenga il tutto e schedularlo a tempo sulla sua macchina Windows usando l’Utilità di Pianificazione che trova nei Programmi -> Strumenti_di_Amministrazione.

      Il file batch sarà qualcosa di simile a questo :

      curl -o file.json https://www.sito.it/percorso/file.json
      ftp -s:script.txt

      Faccia qualche prova e vedrà che riuscirà nell’intento.

      Saluti.

  3. Giuseppe

    Se vuoi creare un file BAtch devi eseguire da prompt del dos : Copy con example.bat

  4. Fabio

    Ciao,
    Grazie per questo articolo!
    Vorrei chiederti se esiste la possibilità di creare uno script per aggiornare (update ) un file di testo .txt su ftp in
    modalità “sveglia preimpostata” .
    es. sono le 10.00 AM preparo il file .txt e vorrei che lo script in automatico alle ore (es. 23.00 PM ) mi carichi e sovrascriva sul server il file.
    è possibile? puoi aiutarmi ? è possibile inoltre impostarlo con “più sveglie anche scavalcando la mezzanotte” ?

    grazie mille in anticipo !

    1. mdede

      Si, basta schedulare un file batch con i comandi ftp da eseguire nella attività pianificate di Windows, per maggiori info legga qui :

      https://www.ilsoftware.it/articoli.asp?tag=Utilita-di-pianificazione-Windows-cos-e-e-come-si-usa_21809

      od usare qualche programma temporizzato per eseguire il batch.

      Saluti

      1. FABIO

        grazie per la risposta.
        provo a tirare giù i file .

Lascia un commento

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>