VBS ftp command download latest uploaded file

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)
	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
	'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."
		FTPDownload = "Error: Unknown."
	End If
	Set oFTPScriptFSO = Nothing
	Set oFTPScriptShell = Nothing
End Function

Open in new window

Who is Participating?
Robberbaron (robr)Connect With a Mentor Commented:
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

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

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

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

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.  
simonlaiAuthor Commented:
robberbaron, many thanks for our ideas....

i manage to do it...

once again...thanks
simonlaiAuthor Commented:
*our => ur
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.