Pagina 1 di 1

Batch per copia da server FTP

MessaggioInviato: lun mag 02, 2011 3:36 pm
da maurogiaf
Salve a tutti!
Su un server FTP ho dei files csv che sono nominati come "YYYY-MM-DD.csv". Vorrei creare un file bat che copi solo i file che hanno il nome corrispondente alla data odierna ( Ad esempio se oggi è il 2-05-2011 vorrei copiare il file che si chiama 2011-05-02.csv). Avevo pensato di usare il comando xcopy al posto del comando get ma non sono sicuro che questo si possa fare.
Spero che qualcuno di voi possa darmi una mano ve ne sarei grado!

Grazie a tutti!!
Mauro

Re: Batch per copia da server FTP

MessaggioInviato: lun mag 02, 2011 4:57 pm
da Rumez
puoi essere un po' più chiaro?

devi collegarti ad un server ftp..controllare i file che hanno la data odierna..e copiarli?

oppure lo psazio ftp per te è interno alla tua rete e quindi raggiungibile tramite lan?

Re: Batch per copia da server FTP

MessaggioInviato: lun mag 02, 2011 7:05 pm
da maurogiaf
Scusami se ti rispondo solo ora.... No il server FTP è esterno alla mia rete lan. Per il resto funziona come hai detto tu, ossia mi collego al server controllo il nome del file e se questo corrisponde alla data odierna lo copio sul mio computer

Re: Batch per copia da server FTP

MessaggioInviato: mar mag 03, 2011 8:59 am
da Rumez
Guarda penso che con i semplici comandi FTP non sia possibile fare quello che dici..una soluzione su cui si può lavorare sarebbe quella di cambiare linguaggio di scripting utilizzando VBScript.

L'idea sarebbe questa:
[nota] creare un file .vbs ( VBScript )
[nota] nel file vbs creare la stringa con i comandi ftp per connettersi e per salvare la lista dei file della cartella in un file di testo ( listafile.txt )
[nota] eseguire i comandi ftp di cui sopra
[nota] leggere il file listafile.txt e lo scorrerlo riga per riga ( tramite istruzioni VBScript )
[nota] ad ogni riga controllare il nome del file..se è uguale alla data di oggi preparare una stringa con i comandi ftp per fare il get del file
[nota] eseguire il comando ftp di cui sopra

Sappi che non è una cosa da 5 minuti ma ci si può lavorare..

Re: Batch per copia da server FTP

MessaggioInviato: mar mag 03, 2011 9:23 am
da maurogiaf
Ti ringrazio! A quanto pare allora dovrò mettermi a studiare vbs....Sai per caso indicarmi qualche link ad un buon corso? Scusami se ti stresso con le domande!
Grazie ancora

Re: Batch per copia da server FTP

MessaggioInviato: mar mag 03, 2011 10:54 am
da Rumez
Questa è la reference ufficiale: http://msdn.microsoft.com/en-us/library ... tt(v=vs.85).aspx

In allegato trovi un'archivio con il lavoro già fatto ( ho trovato spunto da uno script reperito in rete [8D] )

Ti spiego brevemente un paio di cose:
1) c'è una cartella scambio che puoi posizionare in C
2) all'interno di scambio c'è il file connect.vbs che esegue le operazione e una cartella commands dove vengono salvati i file con le istruzioni FTP
3) devi moficare il file connect.vbs inserendo url dell'ftp, username e password nelle apposite variabili
4) esegui una prima volta ( doppio click ) il file connect.vbs a mò di setup
5) d'ora in poi ad ogni esecuzione verrà scaricato nella cartella scambio il file con nome del tipo aaaa-m-g.csv ( aaaa-mm-gg non sono riuscito )dal server ftp

Ovviamente puoi ottimizzarlo e cambiarlo a tuo piacimento ma di sicuro è un buon punto di inizio..

Come non detto gli allegati non sono più supportati!! [B)]
Creati tu le cartelle e il file come ho detto sopra ovvero:
C:\scambio
C:\scambio\commands
C:\scambio\connect.vbs

Per il file copia incolla questo codice:
Codice: Seleziona tutto
Option Explicit
Dim objFSOlist, objFSOget, objFSOdel, objMyFile, objShell, strFTPScriptFileName
Dim strLocalFolderName, strFTPServerName, strLoginID, strFTPServerDir
Dim strPassword, strFTPServerFolder
Dim filesys, filetxt, nomeFile
Const ForReading = 1, ForWriting = 2, ForAppending = 8

' Cartella in cui vengono scaricati i file
strLocalFolderName = "c:\scambio\"

' Server FTP
strFTPServerName = "xxx"

' Username
strLoginID = "xxx"

' Password
strPassword = "xxx"

' Carella remota ( nell'FTP )
strFTPServerFolder = "/"

' Creazione del file con le istruzioni FTP da esguire.
strFTPScriptFileName = strLocalFolderName & "commands\FTPLIST.txt"

Set objFSOlist = CreateObject("Scripting.FileSystemObject")

If (objFSOlist.FileExists(strFTPScriptFileName)) Then
    objFSOlist.DeleteFile(strFTPScriptFileName)
End If

Set objMyFile = objFSOlist.CreateTextFile(strFTPScriptFileName, True)

' Scriviamo le varie istruzioni
objMyFile.WriteLine ("open " & strFTPServerName)
objMyFile.WriteLine (strLoginID)
objMyFile.WriteLine (strPassword)
objMyFile.WriteLine ("ls -1R " & strLocalFolderName & "commands\listafile.txt")
objMyFile.WriteLine ("quit")
objMyFile.Close

Set objFSOlist = Nothing
Set objMyFile = Nothing

' Esecuzione dello script con i comandi FTP
Set objShell = WScript.CreateObject( "WScript.Shell" )
objShell.Run ("ftp -s:" & chr(34) & strFTPScriptFileName & chr(34))
Set objShell = Nothing

' Apriamo il file di testo con la lista dei file
Set filesys = CreateObject("Scripting.FileSystemObject")
Set filetxt = filesys.OpenTextFile(strLocalFolderName & "commands\listafile.txt", ForReading, True)

' scorriamo tutte le righe
Do Until filetxt.AtEndOfStream
   nomeFile = filetxt.ReadLine
   
   if nomeFile = cstr( year(now()) & "-" & month(now()) & "-" & day(now()) & ".csv" ) then
   
      strFTPScriptFileName = strLocalFolderName & "commands\FTPGET.txt"

      Set objFSOget = CreateObject("Scripting.FileSystemObject")

      If (objFSOget.FileExists(strFTPScriptFileName)) Then
         objFSOget.DeleteFile(strFTPScriptFileName)
      End If
   
      Set objMyFile = objFSOget.CreateTextFile(strFTPScriptFileName, True)

      ' Scriviamo le varie istruzioni per il get
      objMyFile.WriteLine ("open " & strFTPServerName)
      objMyFile.WriteLine (strLoginID)
      objMyFile.WriteLine (strPassword)
      objMyFile.WriteLine ("get " & nomeFile)
      objMyFile.WriteLine ("quit")
      objMyFile.Close

      Set objFSOget = Nothing
      Set objMyFile = Nothing

      ' Esecuzione dello script con i comandi FTP
      Set objShell = WScript.CreateObject( "WScript.Shell" )
      objShell.Run ("ftp -s:" & chr(34) & strFTPScriptFileName & chr(34))
      Set objShell = Nothing
   
   end if

Loop

filetxt.Close
set filesys = nothing



se hai bisogno chiedi..

Re: Batch per copia da server FTP

MessaggioInviato: mar mag 03, 2011 3:09 pm
da maurogiaf
Che cosa posso dirti? Grazie mille!! Mi hai risolto un grosso problema... Adesso vedrò di mettermi a lavoro e spero di non avere problemi per non disturbarti troppo!!