Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

Batch per copia da server FTP

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

Batch per copia da server FTP

Messaggioda maurogiaf » lun mag 02, 2011 3:36 pm

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
Avatar utente
maurogiaf
Neo Iscritto
Neo Iscritto
 
Messaggi: 7
Iscritto il: ven apr 15, 2011 9:39 am

Re: Batch per copia da server FTP

Messaggioda Rumez » lun mag 02, 2011 4:57 pm

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?
Avatar utente
Rumez
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 1783
Iscritto il: mar mag 13, 2003 2:08 pm

Re: Batch per copia da server FTP

Messaggioda maurogiaf » lun mag 02, 2011 7:05 pm

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
Avatar utente
maurogiaf
Neo Iscritto
Neo Iscritto
 
Messaggi: 7
Iscritto il: ven apr 15, 2011 9:39 am


Re: Batch per copia da server FTP

Messaggioda Rumez » mar mag 03, 2011 8:59 am

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..
Avatar utente
Rumez
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 1783
Iscritto il: mar mag 13, 2003 2:08 pm

Re: Batch per copia da server FTP

Messaggioda maurogiaf » mar mag 03, 2011 9:23 am

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
Avatar utente
maurogiaf
Neo Iscritto
Neo Iscritto
 
Messaggi: 7
Iscritto il: ven apr 15, 2011 9:39 am

Re: Batch per copia da server FTP

Messaggioda Rumez » mar mag 03, 2011 10:54 am

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..
Avatar utente
Rumez
Membro Ufficiale (Gold)
Membro Ufficiale (Gold)
 
Messaggi: 1783
Iscritto il: mar mag 13, 2003 2:08 pm

Re: Batch per copia da server FTP

Messaggioda maurogiaf » mar mag 03, 2011 3:09 pm

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!!
Avatar utente
maurogiaf
Neo Iscritto
Neo Iscritto
 
Messaggi: 7
Iscritto il: ven apr 15, 2011 9:39 am


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising