I have some problems finding an easy way to do FTP in VBScript so I
put this script together to do what I needed. I initially thought it
would be a hassle but it turn out pretty managable. Here is a strip
down version of the script with comments for anyone who'd like to try
it out. Basically your just creating a FTPCommands file the is used
with a ftp -s: switch.

You may need to reformat this thing before using it, the Google post
isn't wide enough I think.
Here it is...

'****Script to FTP using VBScript (With Comments)
'****By Matthew Ososky
'****Happy FTP'n!


'****THESE ARE YOUR VARIABLES TO SET

DirectoryRoot = "C:\Scripts" 'PATH OF THE FOLDER YOUR RUNNING THIS
SCRIPT IN
LogsDir = "C:\Logs" 'PATH OF THE FILE YOU WANT TO TRANSFER
FTPFile = "server.log" 'FILE TO FTP
FTPSERVER = "ftp.iris.state.wy.us" 'YOUR FTP SERVER's NAME OR ADDRESS




set objFSO = CreateObject("Scripting.FileSystemObject")

'****CHECK TO SEE IF YOUR TARGET FILE EXISTS
'****IF YES GET INTO THE FTP EXECUTION
'****IF NOT, LOG IT AND END SCRIPT


if objFSO.FileExists(LogsDir & "\" & FTPFile ) then


'***GET A HANDLE ON YOUR TARGET FILE
'***COPY TARGET FILE TO THE DIRECTORYROOT

Set LogFile = objFSO.GetFile(LogsDir & "\" & FTPFile)
LogFile.copy DirectoryRoot & "\" & FTPFile , true


'****NOW CREATE OR RECREATE THE FTPCOMMANDS.TXT FILE
'****THIS FILE DETERMINES HOW FTP WILL EXECUTE

if CheckFTPCommands = TRUE then
DeleteFTPCommands()
CreateFTPCommands()
else
CreateFTPCommands()
end if

'****NOW WRITE THE COMMANDS TO HANDLE FTP

WRITELINE("anonymous") 'LOG IN
WRITELINE("ls") 'RETRIVE DIRECTORY (YOU NEED TOO)
WRITELINE("cd Logs") 'CHANGE TO THE DIRECTORY YOU WANT
'WRITELINE("cd Server1Logs) 'AS MANY TIMES AS YOU NEED
WRITELINE("put " & FTPFile) 'ONCE IN THE RIGHT DIR. PUT YOUR FILE IN
WRITELINE("Quit") 'THEN GET OUT

'****OK, NOW YOU NEED TO EXECUTE THE FTP SHELL COMMAND THAT DOES ALL
THIS

Set WshShell = CreateObject("WScript.Shell")

'****HERE'S THE SYNTAX STRING;
'****THE -s: flag calls our FTPCommands.txt file
'****Which is located at ~ DirectoryRoot & "\FTPCommands.txt
'****AFTER THAT YOU ENTER THE FTP SITE'S NAME OR ADDRESS

FTPString = "FTP -s:" & DirectoryRoot & "\FTPCommands.txt " &
FTPSERVER

'****EXECUTE THE SHELL COMMAND
'****LOG THE OPERATION
'****WAIT 2 SECONDS (you need to) THEN DELETE THE COPY OF THE FILE
YOU PUT IN DIRECTORYROOT

Set oExec = WshShell.Exec(FTPString)
LogStart 4, "The Server Log has finished FTP Transfer " & time()
wscript.sleep 2000
DeleteFTPFile(FTPFILE)


'****YOUR ALL DONE
'****YOU CAN CHANGE THE SCRIPT TO DO ANOTHER FILE,
'****OR EVEN GET FILES AND DO STUFF WITH THEM

else
LogStart 4, "Your target file does not exist." & time()
end if





'****These are the Subroutines

'****LOGSTART MAKES LOGS ENTRIES IN THE WINDOWS EVENT LOG (APPLICATION
under "WHS" - Windows script Host)

Sub LogStart (strEventType, strMessage)
Set objShell = CreateObject("Wscript.Shell")
objShell.LogEvent cint(intEventType), strMessage
Err.Clear
Exit Sub
End sub

Sub CreateFTPCommands()

set objFSO = CreateObject("Scripting.FileSystemObject")
Set FTPCommands = objFSO.CreateTextFile(DirectoryRoot &
"\FTPCommands.txt")

End Sub

Function CheckFTPCommands()

set objFSO = CreateObject("Scripting.FileSystemObject")
CheckFTPCommands = objFSO.FileExists(DirectoryRoot &
"\FTPCommands.txt")

End Function

Sub DeleteFTPCommands()

set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile(DirectoryRoot & "\FTPCommands.txt")

End Sub

Sub WRITELINE(strLINE)

set objFSO = CreateObject("Scripting.FileSystemObject")
set FTPCommands = objFSO.OpenTextFile(DirectoryRoot &
"\FTPCommands.txt",8,true)
FTPCommands.writeline strLINE

End Sub

Sub DeleteFTPFile(FILENAME1)

set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFile(DirectoryRoot & "\" & FILENAME1)

End Sub

RE: VBScript to do FTP by Russ

Russ
Tue Jan 11 10:21:02 CST 2005

There is an excellent FTP ActiveX control (free version available) that
exposes a ton of functionality available at http://www.devpower.com.

"Matthew" wrote:

> I have some problems finding an easy way to do FTP in VBScript so I
> put this script together to do what I needed. I initially thought it
> would be a hassle but it turn out pretty managable. Here is a strip
> down version of the script with comments for anyone who'd like to try
> it out. Basically your just creating a FTPCommands file the is used
> with a ftp -s: switch.
>
> You may need to reformat this thing before using it, the Google post
> isn't wide enough I think.
> Here it is...
>
> '****Script to FTP using VBScript (With Comments)
> '****By Matthew Ososky
> '****Happy FTP'n!
>
>
> '****THESE ARE YOUR VARIABLES TO SET
>
> DirectoryRoot = "C:\Scripts" 'PATH OF THE FOLDER YOUR RUNNING THIS
> SCRIPT IN
> LogsDir = "C:\Logs" 'PATH OF THE FILE YOU WANT TO TRANSFER
> FTPFile = "server.log" 'FILE TO FTP
> FTPSERVER = "ftp.iris.state.wy.us" 'YOUR FTP SERVER's NAME OR ADDRESS
>
>
>
>
> set objFSO = CreateObject("Scripting.FileSystemObject")
>
> '****CHECK TO SEE IF YOUR TARGET FILE EXISTS
> '****IF YES GET INTO THE FTP EXECUTION
> '****IF NOT, LOG IT AND END SCRIPT
>
>
> if objFSO.FileExists(LogsDir & "\" & FTPFile ) then
>
>
> '***GET A HANDLE ON YOUR TARGET FILE
> '***COPY TARGET FILE TO THE DIRECTORYROOT
>
> Set LogFile = objFSO.GetFile(LogsDir & "\" & FTPFile)
> LogFile.copy DirectoryRoot & "\" & FTPFile , true
>
>
> '****NOW CREATE OR RECREATE THE FTPCOMMANDS.TXT FILE
> '****THIS FILE DETERMINES HOW FTP WILL EXECUTE
>
> if CheckFTPCommands = TRUE then
> DeleteFTPCommands()
> CreateFTPCommands()
> else
> CreateFTPCommands()
> end if
>
> '****NOW WRITE THE COMMANDS TO HANDLE FTP
>
> WRITELINE("anonymous") 'LOG IN
> WRITELINE("ls") 'RETRIVE DIRECTORY (YOU NEED TOO)
> WRITELINE("cd Logs") 'CHANGE TO THE DIRECTORY YOU WANT
> 'WRITELINE("cd Server1Logs) 'AS MANY TIMES AS YOU NEED
> WRITELINE("put " & FTPFile) 'ONCE IN THE RIGHT DIR. PUT YOUR FILE IN
> WRITELINE("Quit") 'THEN GET OUT
>
> '****OK, NOW YOU NEED TO EXECUTE THE FTP SHELL COMMAND THAT DOES ALL
> THIS
>
> Set WshShell = CreateObject("WScript.Shell")
>
> '****HERE'S THE SYNTAX STRING;
> '****THE -s: flag calls our FTPCommands.txt file
> '****Which is located at ~ DirectoryRoot & "\FTPCommands.txt
> '****AFTER THAT YOU ENTER THE FTP SITE'S NAME OR ADDRESS
>
> FTPString = "FTP -s:" & DirectoryRoot & "\FTPCommands.txt " &
> FTPSERVER
>
> '****EXECUTE THE SHELL COMMAND
> '****LOG THE OPERATION
> '****WAIT 2 SECONDS (you need to) THEN DELETE THE COPY OF THE FILE
> YOU PUT IN DIRECTORYROOT
>
> Set oExec = WshShell.Exec(FTPString)
> LogStart 4, "The Server Log has finished FTP Transfer " & time()
> wscript.sleep 2000
> DeleteFTPFile(FTPFILE)
>
>
> '****YOUR ALL DONE
> '****YOU CAN CHANGE THE SCRIPT TO DO ANOTHER FILE,
> '****OR EVEN GET FILES AND DO STUFF WITH THEM
>
> else
> LogStart 4, "Your target file does not exist." & time()
> end if
>
>
>
>
>
> '****These are the Subroutines
>
> '****LOGSTART MAKES LOGS ENTRIES IN THE WINDOWS EVENT LOG (APPLICATION
> under "WHS" - Windows script Host)
>
> Sub LogStart (strEventType, strMessage)
> Set objShell = CreateObject("Wscript.Shell")
> objShell.LogEvent cint(intEventType), strMessage
> Err.Clear
> Exit Sub
> End sub
>
> Sub CreateFTPCommands()
>
> set objFSO = CreateObject("Scripting.FileSystemObject")
> Set FTPCommands = objFSO.CreateTextFile(DirectoryRoot &
> "\FTPCommands.txt")
>
> End Sub
>
> Function CheckFTPCommands()
>
> set objFSO = CreateObject("Scripting.FileSystemObject")
> CheckFTPCommands = objFSO.FileExists(DirectoryRoot &
> "\FTPCommands.txt")
>
> End Function
>
> Sub DeleteFTPCommands()
>
> set objFSO = CreateObject("Scripting.FileSystemObject")
> objFSO.DeleteFile(DirectoryRoot & "\FTPCommands.txt")
>
> End Sub
>
> Sub WRITELINE(strLINE)
>
> set objFSO = CreateObject("Scripting.FileSystemObject")
> set FTPCommands = objFSO.OpenTextFile(DirectoryRoot &
> "\FTPCommands.txt",8,true)
> FTPCommands.writeline strLINE
>
> End Sub
>
> Sub DeleteFTPFile(FILENAME1)
>
> set objFSO = CreateObject("Scripting.FileSystemObject")
> objFSO.DeleteFile(DirectoryRoot & "\" & FILENAME1)
>
> End Sub
>