Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

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

how do I copy a file from my c drive to an FTP site using vbscript

I have tried this but it doesnt work.

Dim fso
set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile "C:\test.txt", "ftp:\\ftp.mysite.com\test.bak"
set fso = nothing
msgbox "Done!"
  • 2
  • 2
1 Solution
Lee W, MVPTechnology and Business Process AdvisorCommented:
ftp doesn't work that way.  Not sure how you'd do it in vbscript.  Could write a script for you in batch.  Probably be simpler than vbscript.
I agree with leew. Using ftp.exe included in Windows is an easy way to do this simple task.
You can create a script file to feed it whichever FTP commands you wish.
If you really want to use VBscript, you can create this script file with it, then call ftp.exe from there.
On Error Resume Next

Dim MySite
Dim myPath

Set MySite= CreateObject("CuteFTPPro.TEConnection")

MySite.Host = "ftp://usrname:pwd@ftpsite.com/data/"

If (Cbool(MySite.IsConnected)) Then    
   MySite.LocalFolder = "F:\exports"

   myPath = "F:\exports\data.txt"
   MySite.Upload myPath
   Set MySite = nothing

End If

You'll have to have cuteFTP tough..
or how about this one ?

<%@ Language=VBScript %>
' FTP via ASP without using 3rd-party components
' Ben Meghreblian 15th Jan 2002
' benmeg at benmeg dot com / http://benmeg.com
' This script assumes the file to be FTP'ed is in the same directory as this script.
' It should be obvious how to change this (*hint* change the lcd line).
' You may specify a wildcard in ftp_files_to_put (e.g. *.txt).

' NB: You need to have C:\winnt\system32\wshom.ocx registered to use the WSCRIPT.SHELL object.
' It is registered by default, but is sometimes removed for security reasons (no kidding!).
' You will also need cmd.exe in the path, which again is there, unless the box is locked down.
' Check with your web host/resident sysadmin if in doubt.
Dim objFSO, objTextFile, oScript, oScriptNet, oFileSys, oFile, strCMD, strTempFile, strCommandResult
Dim ftp_address, ftp_username, ftp_password, ftp_physical_path, ftp_files_to_put

' Edit these variables to match your specifications
ftp_address          = "ftp.server.com"
ftp_username         = "username"
ftp_password         = "password"
ftp_remote_directory = "subdirectory" ' Leave blank if uploading to root directory
ftp_files_to_put     = "file.txt"

On Error Resume Next
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")
Set objFSO = CreateObject("Scripting.FileSystemObject")
' Build our ftp-commands file
Set objTextFile = objFSO.CreateTextFile(Server.MapPath("test.ftp"))
objTextFile.WriteLine "lcd " & Server.MapPath(".")
objTextFile.WriteLine "open " & ftp_address
objTextFile.WriteLine ftp_username
objTextFile.WriteLine ftp_password

' Check to see if we need to issue a 'cd' command
If ftp_remote_directory <> "" Then
   objTextFile.WriteLine "cd " & ftp_remote_directory
End If

objTextFile.WriteLine "prompt"

' If the file(s) is/are binary (i.e. .jpg, .mdb, etc..), uncomment the following line' objTextFile.WriteLine "binary"
' If there are multiple files to put, we need to use the command 'mput', instead of 'put'
If Instr(1, ftp_files_to_put, "*",1) Then
   objTextFile.WriteLine "mput " & ftp_files_to_put
   objTextFile.WriteLine "put " & ftp_files_to_put
End If
objTextFile.WriteLine "bye"
Set objTextFile = Nothing
' Use cmd.exe to run ftp.exe, parsing our newly created command file
strCMD = "ftp.exe -s:" & Server.MapPath("test.ftp")
strTempFile = "C:\" & oFileSys.GetTempName( )
' Pipe output from cmd.exe to a temporary file (Not :| Steve)
Call oScript.Run ("cmd.exe /c " & strCMD & " > " & strTempFile, 0, True)
Set oFile = oFileSys.OpenTextFile (strTempFile, 1, False, 0)

On Error Resume Next
' Grab output from temporary file
strCommandResult = Server.HTMLEncode( oFile.ReadAll )
' Delete the temporary & ftp-command files
Call oFileSys.DeleteFile( strTempFile, True )
Call objFSO.DeleteFile( Server.MapPath("test.ftp"), True )
Set oFileSys = Nothing
Set objFSO = Nothing
' Print result of FTP session to screen
Response.Write( Replace( strCommandResult, vbCrLf, "<br>", 1, -1, 1) )
Lee W, MVPTechnology and Business Process AdvisorCommented:
In batch, that script would be so much simpler:

Set ftpAddress=ftp.server.com
Set ftpUsername=username
Set ftpPassword=password
REM  Leave following line blank if uploading to root directory
Set ftpRemoteDir=/subdirectory/path
Set ftpFile=file.txt
Set FileIsTextOnly=Y

echo lcd > ftp.scr
echo open %ftpAddress% >>ftp.scr
echo %ftpusername% >>ftp.scr
echo %ftppassword%>>ftp.scr
If "%ftpRemoteDir%" NEQ "" echo cd %ftpRemoteDir% >> ftp.scr
echo prompt >> ftp.scr
If /i "%FileIsTextOnly%" == "Y" (
   echo asc >> ftp.scr
) Else (
   echo bin >> ftp.scr
if "%ftpfile%" == "*" (
   echo mput %filetoput% >> ftp.scr
) Else (
   echo put %filetoput% >> ftp.scr
echo bye >> ftp.scr
ftp -s:ftp.scrftp.scr.log
start notepad ftp.scr.log

Featured Post


Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

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