Solved

VBS ftp command download latest uploaded file

Posted on 2010-09-17
3
1,039 Views
Last Modified: 2012-05-10
Dear All:

Can any one provide some ideas how can i develop a vbs scripts with download the new file from ftp server?

i have developed some scripts but i only can download all file instead of download only latest file in ftp server.

Many thanks
Function FTPDownload(sSite, sUsername, sPassword, sLocalPath, sRemotePath, sRemoteFile)



	Const OpenAsDefault = -2

	Const FailIfNotExist = 0

	Const ForReading = 1

	Const ForWriting = 2

 

	Set oFTPScriptFSO = CreateObject("Scripting.FileSystemObject")

	Set oFTPScriptShell = CreateObject("WScript.Shell")



	sRemotePath = Trim(sRemotePath)

	sLocalPath = Trim(sLocalPath)

 

	'----------Path Checks---------

	'Here we will check the remote path, if it contains

	'spaces then we need to add quotes to ensure

	'it parses correctly.

	If InStr(sRemotePath, " ") > 0 Then

		If Left(sRemotePath, 1) <> """" And Right(sRemotePath, 1) <> """" Then

			sRemotePath = """" & sRemotePath & """"

		End If

	End If

 

	'Check to ensure that a remote path was

	'passed. If it's blank then pass a "\"

	If Len(sRemotePath) = 0 Then

		'Please note that no premptive checking of the

		'remote path is done. If it does not exist for some

		'reason. Unexpected results may occur.

		sRemotePath = "\"

	End If

 

	'If the local path was blank. Pass the current

	'working direcory.

	If Len(sLocalPath) = 0 Then

		sLocalpath = oFTPScriptShell.CurrentDirectory

	End If

 

	If Not oFTPScriptFSO.FolderExists(sLocalPath) Then

		'destination not found

		FTPDownload = "Error: Local Folder Not Found."

		Exit Function

	End If

 

	sOriginalWorkingDirectory = oFTPScriptShell.CurrentDirectory

	oFTPScriptShell.CurrentDirectory = sLocalPath

	'--------END Path Checks---------

 

	'build input file for ftp command

	sFTPScript = sFTPScript & "USER " & sUsername & vbCRLF

	sFTPScript = sFTPScript & sPassword & vbCRLF

	sFTPScript = sFTPScript & "cd " & sRemotePath & vbCRLF

	sFTPScript = sFTPScript & "ascii" & vbCRLF

	sFTPScript = sFTPScript & "prompt n" & vbCRLF

	sFTPScript = sFTPScript & "mget " & sRemoteFile & vbCRLF

	sFTPScript = sFTPScript & "quit" & vbCRLF & "quit" & vbCRLF & "quit" & vbCRLF





	sFTPTemp = oFTPScriptShell.ExpandEnvironmentStrings("%TEMP%")

	sFTPTempFile = sFTPTemp & "\" & oFTPScriptFSO.GetTempName

	sFTPResults = sFTPTemp & "\" & oFTPScriptFSO.GetTempName



	'Write the input file for the ftp command

	'to a temporary file.

	Set fFTPScript = oFTPScriptFSO.CreateTextFile(sFTPTempFile, True)

	fFTPScript.WriteLine(sFTPScript)

	fFTPScript.Close

	Set fFTPScript = Nothing 



	oFTPScriptShell.Run "%comspec% /c FTP -n -s:" & sFTPTempFile & " " & sSite & " > " & sFTPResults, 0, TRUE

 	

	Wscript.Sleep 1000

 

	'Check results of transfer.

	Set fFTPResults = oFTPScriptFSO.OpenTextFile(sFTPResults, ForReading, FailIfNotExist, OpenAsDefault)

	sResults = fFTPResults.ReadAll

	fFTPResults.Close

 

	'oFTPScriptFSO.DeleteFile(sFTPTempFile)

	'oFTPScriptFSO.DeleteFile (sFTPResults)

 	

	'Wscript.Echo sResults



	If InStr(sResults, "226 Transfer complete.") > 0 Then

		FTPDownload = True

	ElseIf InStr(sResults, "File not found") > 0 Then

		FTPDownload = "Error: File Not Found"

	ElseIf InStr(sResults, "cannot log in.") > 0 Then

		FTPDownload = "Error: Login Failed."

	Else

		FTPDownload = "Error: Unknown."

	End If

 

	Set oFTPScriptFSO = Nothing

	Set oFTPScriptShell = Nothing

End Function

Open in new window

0
Comment
Question by:simonlai
  • 2
3 Comments
 
LVL 32

Accepted Solution

by:
Robberbaron (robr) earned 500 total points
ID: 33709387
the builtin FTP client is hard to script. It has no interactive options; there are some freeware one that do but cant find the one I used a few years ago.

Using the builtin FTP client:

i think you will have to capture a ftp DIR command to a file, parse that to determine which files to retrieve based upon displayed date/time, and then do the retrival.
this will require 2 connections but that is probably not a big problem.  You have done the second conenction

Conn1:
user ; pwd ; dir "source folder" "c:\localtempfile.txt" ; quit

Conn2:
user; pwd ; cd "source folder" ; mget file1 file2 file3 file4

(or use multiple mget to make it easier to script many files)
quit;


http://www.nsftools.com/tips/MSFTP.htm
dir  
Displays a list of a remote directory's files and subdirectories. See also mdir, which can list multiple directories.
 Syntax: dir [remote-directory] [local-file]   Parameter(s):
 remote-directory -  Specifies the directory for which you want to see a listing. If no  directory is specified, the current working directory on the remote  computer is used.
 local-file -  Specifies a local file to store the listing. If not specified, output is displayed on the screen.  
0
 
LVL 1

Author Comment

by:simonlai
ID: 33713568
robberbaron, many thanks for our ideas....

i manage to do it...


once again...thanks
0
 
LVL 1

Author Comment

by:simonlai
ID: 33713569
*our => ur
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction During my participation as a VBScript contributor at Experts Exchange, one of the most common questions I come across is this: "I have a script that runs against only one computer. How can I make it run against a list of computers in …
This is pretty cool.  The purpose of this VB Script is to help you document where JAR (Java ARchive) files and specifically java class files are located so that you can address issues seen with a client or that you can speak intelligently with a dev…
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.
In this video I am going to show you how to back up and restore Office 365 mailboxes using CodeTwo Backup for Office 365. Learn more about the tool used in this video here: http://www.codetwo.com/backup-for-office-365/ (http://www.codetwo.com/ba…

861 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

25 Experts available now in Live!

Get 1:1 Help Now