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