• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 362
  • Last Modified:

VBScript to download last 7 days of files from FTP

My FTP servers logs certain data in subfolders named by the date, like 20110306. I am trying to write a vbscript that will download the last 7 days worth of files from those subfolders. I found this ftp code, but I am not sure how to do the date part for the folders.
Wscript.Echo FTPDownload("ftp.mysite.com", "myaccount", "mypassword", "C:\temp\1\", "\", "*")

Open in new window

0
totalimpact
Asked:
totalimpact
  • 6
  • 5
1 Solution
 
prashanthdCommented:
Does it have to scan multiple subfolders?
0
 
Bill PrewCommented:
How are the subfolders and files named?

~bp
0
 
totalimpactAuthor Commented:
There is a subfolder for each day - named like 20110306

There are about a hundred folders there, and I want just the last 7 days worth of folders = 7 folders, and 2-5 files in each folder.

Here is an example dir listing:
/
  20110301/many-csvfiles.csv
  20110302/many-csvfiles.csv
  20110303/many-csvfiles.csv
  20110304/many-csvfiles.csv
 
0
Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

 
Bill PrewCommented:
Here is an example of how you could look for the prior 7 days as the folder names to xfer from using the function you mentioned above.

For intDays = 0 To -7 Step -1
   datFetchDate = DateAdd("d", intDays, Now())
   strFetchDate = Year(datFetchDate) & Right("0" & Month(datFetchDate), 2) & Right("0" & Day(datFetchDate), 2)
   Wscript.Echo strFetchDate
   Wscript.Echo FTPDownload("ftp.mysite.com", "myaccount", "mypassword", "C:\temp\1\", strFetchDate, "*")
Next

Open in new window

~bp
0
 
totalimpactAuthor Commented:
Thanks Bill - that worked, but I was hoping to keep the folder structure, It just gets all the files, and they are together without folders, sometimes theres 20-30 files in a folder, so this gets messy.

 do you think I should adjust the ftp command somehow, or just have vb create the folders?
0
 
totalimpactAuthor Commented:
also, I need to get rid of the msgboxes - I got rid of the strFetchDate, but it keeps echoing -1 for each file it downloads, and I dont see this in the code, I guess its part of the function?
0
 
Bill PrewCommented:
See if this gets closer to what you need.  I added logic to create the local date folder if needed, and then used that path in the FTP routine.  Removing the Wscript.Echo in front of that function will elliminate the -1 display, that was showing the return from the function call.

Set objFSO = CreateObject("Scripting.FileSystemObject")
For intDays = 0 To -7 Step -1
   datFetchDate = DateAdd("d", intDays, Now())
   strFetchDate = Year(datFetchDate) & Right("0" & Month(datFetchDate), 2) & Right("0" & Day(datFetchDate), 2)
   strDestDir = "C:\temp\" & strFetchDate & "\"
   If Not objFSO.FolderExists(strDestDir) Then objFSO.CreateFolder(strDestDir)
   FTPDownload("ftp.mysite.com", "myaccount", "mypassword", strDestDir, strFetchDate, "*")
Next

Open in new window

~bp
0
 
totalimpactAuthor Commented:
That gets all the right files and dirs.

 I figured what you said on the -1, but...if I remove Wscript.Echo, it throws an error:

Cannot use parentheses when calling a Sub
0
 
Bill PrewCommented:
Ah yes, sorry, should have mentioned that.  You can work around that in one of two ways.  First, keep it as a function and just assign the return to a variable, rather than echo it.  For example:

intReturn = FTPDownload("ftp.mysite.com", "myaccount", "mypassword", strDestDir, strFetchDate, "*")

Open in new window

The other approach if you really don't need the return is to change the call to work like a subroutine rather than a function.  In this way no value if returned by the call.  For example:

FTPDownload "ftp.mysite.com", "myaccount", "mypassword", strDestDir, strFetchDate, "*"

Open in new window

I'd recommend the first though.

~bp
0
 
totalimpactAuthor Commented:
I learn more about vbs everyday ;) Thats perfect, thanks for all your help Bill.
0
 
totalimpactAuthor Commented:
Bill did a great job, was very thorough and speedy.
0
 
Bill PrewCommented:
Great, glad that was helpful, thanks.

~bp
0

Featured Post

[Webinar] Kill tickets & tabs using PowerShell

Are you tired of cycling through the same browser tabs everyday to close the same repetitive tickets? In this webinar JumpCloud will show how you can leverage RESTful APIs to build your own PowerShell modules to kill tickets & tabs using the PowerShell command Invoke-RestMethod.

  • 6
  • 5
Tackle projects and never again get stuck behind a technical roadblock.
Join Now