Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17


Beginners FTP/Script?

Posted on 2002-07-18
Medium Priority
Last Modified: 2012-08-13
Hi everyone,

I need a quick answer to what I hope is an easy question...

I'm creating a program which I'm leaving to run whilst I'm on holiday, which will ftp files, both from my PC to ftp 'sites'(?) and vice versa.  I can do this 'manually' by opening c:\windows\ftp.exe and then then typing in my commands. However now I need to automate this. I only know a small amount of VB, but have been told that I should create a text file containing my commands, which I have (details slightly changed for security):

cd ..
cd icpc
put ICPC.csv

I know want to use this text file to communicate to the ftp.exe, but am totally stuck.  I've tried variations around the theme of:

Call Shell("C:\Windows\ftp.exe S:ICPC.txt", vbMinimizedFocus)

Where ICPC.txt is the name of the txt file, btu am getting nowhere slowly.  Any ideas?

Question by:franbane
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 10
  • 6
  • 4
  • +1

Author Comment

ID: 7162991
Is my desparation showing?

Expert Comment

ID: 7163007
Don't know how to answer your question but did you just supply the correct IP and Login Password to the site?  I didn't check but...

Expert Comment

ID: 7163014
Actually... what other ftp applications do you have?  You can set up a scheduler in some ftp programs... aka ftpvoyager, cuteftp...
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Expert Comment

ID: 7163024
Are you getting any error messages?  Any more info would be great

Expert Comment

ID: 7163031
Ftp Voyager has another application that comes with it... "FTP Scheduler" I just played with it and created the script for logging into my webserver and uploading a file into a subdirectory (took me all of 2 minutes)

Main Site

Download (3.1 Megs)

Author Comment

ID: 7163034
Oh no, I've got to go just as the answers come error messages, I have WS_FTP95 Pro...I did n't supply correct details...go to go, sorry.

Expert Comment

ID: 7163039
If you need help with creating the script (seemed intuitive to me) just tell me...

Author Comment

ID: 7163040
Oh and I would really like to code this to go inside another progarm I have, if possible. Is the shell thing doable?

Expert Comment

ID: 7163055
Might be version specific (just dl'ed 7.5t)..

Go to Tools -> Scheduler (On the menu)

Create new task...

The screen should be intuitive to copy what you want to where you want and vice versa...

Expert Comment

ID: 7163066
Take a look at the Microsoft Internet Transfer Control 6.0 SP4

Project -> Components

help file below....
Using the Internet Transfer Control

The Internet Transfer control implements two widely-used Internet protocols: the HyperText Transfer Protocol (HTTP) and the File Transfer Protocol (FTP). Using the Internet Transfer control, you can connect to any site that uses one of these protocols, and retrieve files using either the OpenURL or Execute method.

Possible Uses
To add an FTP browser to any application.

To create an application that automatically downloads files from a public FTP site.

To parse a World Wide Web site for graphics references and download the graphics only.

To present a custom display of dynamic data retrieved from a Web page.
Basic Operation
The functionality of the Internet Transfer control depends on the protocol you wish to use. Because the two supported protocols work differently, the operations you can perform depend on which protocol you are using. For example, the GetHeader method only works with HTTP (HTML documents).

However, there are a few procedures that are common to both protocols. Basically, in order to use either protocol, you must:

Set the AccessType property to a valid proxy server.

Invoke the OpenURL method with a valid URL.

Invoke the Execute method with a valid URL and command appropriate to the protocol.

Use the GetChunk method to retrieve data from the buffer.
Setting the AccessType Property: Using a Proxy Server
In order to make any kind of connection to the Internet, you must determine how your computer is connected to the Internet. If you are on an intranet, you will probably be connected to the Internet via a proxy server.

In short, a proxy server is an intermediary between your computer and the Internet. All computers on an intranet that need to connect to the Internet must do so through a proxy server. Thus the proxy functions as a firewall between the intranet and the Internet, discarding invalid end-user and external requests, thereby protecting the intranet from hostile actions.

To find the proxy settings on your computer

Note   The following steps apply only to Windows 95, Windows NT. 4.0, or later systems.

On the Taskbar of your computer, click Start.

On the Settings item, click the Control Panel.

Double-click the Internet icon.

On the Internet Properties dialog box, click Connection.

Under Proxy Server, confirm that the Connect Through a Proxy Server check box is selected.

If it is selected, click Settings. The name of proxy servers you use for various protocols will be found in the dialog box. If no proxy is defined, contact your system administrator for available proxy servers.
If you intend to use a proxy other than that named in the dialog box, set the AccessType property to icNamedProxy (2). Then set the Proxy property to the name of the proxy, as shown in the code below:

Inet1.Proxy = "myProxyName"
Inet1.AccessType = icNamedProxy

On the other hand, if you are content to use the default proxy (as determined by your computer's registry), ignore the Proxy property, and simply set the AccessType to icUseDefault (0).

The settings for AccessType are shown in the following table:

Constant Value Description
icUseDefault 0 (Default) Use Defaults. The control uses default settings found in the registry to access the Internet.
icDirect 1 Direct to Internet. The control has a direct connection to the Internet.
icNamedProxy 2 Named Proxy. Instructs the control to use the proxy server specified in the Proxy property.

Invoke the OpenURL Method
After you set the AccessType property, the most basic operation is to use the OpenURL method with a valid URL. When you use the OpenURL method, the result will depend on the target URL. For example, the following URL will return the HTML document found at

' A TextBox control named Text1 contains the
' result of the method. The Internet Transfer
' control is named Inet1.
Text1.Text = Inet1.OpenURL("")

As a result, the TextBox control is filled with the HTML source, which may resemble the figure below:

In this case, the default action was to return the HTML document located at the URL. However, if the URL is modified to target a specific text file, the actual file would be retrieved. For example, the following code:

Text1.Text = Inet1. _

would result in the actual text of the file, as shown below:

Tip   When you use either the OpenURL or Execute method, you need not set the Protocol property. The Internet Transfer control will automatically set itself to the correct protocol, as determined by the protocol portion of the URL.

Finally, you can use the OpenURL method with a URL that includes appended data. For example, many Web sites offer the ability to search a database. To search, send a URL that includes the search criteria. For example, the following code would use a search engine named "search.exe" with the criteria "find=Maui."

Dim strURL As String
strURL = _
Text1.Text = Inet1.OpenURL(strURL)

If the search engine finds a match for the criteria, an HTML document would be assembled and returned with the appropriate information.

Saving to a File Using the OpenURL Method
If you wish to save the data retrieved through the OpenURL method to a file, use the Open, Put, and Close statements, as shown in the code below. This example streams a binary file into a Byte array before saving the data to disk:

Dim strURL As String
Dim bData() As Byte      ' Data variable
Dim intFile As Integer   ' FreeFile variable
strURL = _
intFile = FreeFile()      ' Set intFile to an unused
                        ' file.
' The result of the OpenURL method goes into the Byte
' array, and the Byte array is then saved to disk.
bData() = Inet1.OpenURL(strURL, icByteArray)
Open "C:\Temp\Softlib.exe" For Binary Access Write _
As #intFile
Put #intFile, , bData()
Close #intFile

A similar procedure can be used to write a text file to disk, except no Byte array is needed; the data is saved directly to the file:

Dim strURL As String      ' URL string
Dim intFile As Integer   ' FreeFile variable
IntFile = FreeFile()
strURL = ""
Open "c:\temp\MSsource.txt" For Output _
As #IntFile
Write #IntFile, Inet1.OpenURL(strURL)
Close #IntFile

Synchronous and Asynchronous Transmission
The OpenURL method results in a synchronous transmission of data. In this context, synchronous means that the transfer operation occurs before any other procedures are executed. Thus the data transfer must be completed before any other code can be executed.

On the other hand, the Execute method results in an asynchronous transmission. When the Execute method is invoked, the transfer operation occurs independently of other procedures. Thus, after invoking the Execute method, other code can execute while data is received in the background.

What does this mean for the user of the Internet Transfer control? In short, using the OpenURL method results in a direct stream of data that you can save to disk (as shown above), or view directly in a TextBox control (if the data was text). On the other hand, if you use the Execute method to retrieve data, you must monitor the control's connection state using the StateChanged event. When the appropriate state is reached, invoke the GetChunk method to retrieve data from the control's buffer. This operation is discussed in greater detail below.

Using the Execute Method with the FTP Protocol
The Execute method has four arguments: url, operation, data, and requestHeaders. FTP operations take only the operation argument and the url argument, which is optional. For example, to get a file from a remote computer, you could use the following code:

Inet1.Execute "FTP://", _
"GET disclaimer.txt C:\Temp\Disclaimer.txt"

If you are used to using FTP to retrieve files from anonymous FTP servers, you will be familiar with certain commands used to navigate through server trees, and to retrieve files to a local hard disk. For example, to change directory with the FTP protocol, you would use the command "CD" with the path of the directory you wish to change to.

For the most common operations, such as putting a file on a server and retrieving a file from a server, the Internet Transfer control uses the same or a similar command with the Execute method. For example, the following code uses the "CD" command as an argument of the Execute method to change directory:

' The txtURL textbox contains the path to open. The
' txtRemotePath textbox contains the path to change to.
Inet1.Execute txtURL.Text, "CD " & txtRemotePath.Text

Note   When using the Execute method with FTP commands, the data and requestHeaders arguments are not used. Instead, all of the operations and their parameters are passed as a single string in the operation argument; parameters are separated by a space. In the descriptions below, do not confuse the terms "file1" and "file2" with the data and requestHeaders arguments.

The syntax for FTP operations is:

operationName file1 file2

For example, to get a file, the following code includes the operation name ("GET"), and the two file names required by the operation:

' Get the file named Disclaimer.txt and copy it to the
' location C:\Temp\Disclaimer.txt
Inet1.Execute, _
"GET Disclaimer.txt C:\Temp\Disclaimer.txt"

The following table lists the supported FTP commands of the control:

Operation Description Example
CD file1 Change Directory. Changes to the directory specified in file1. Execute , "CD docs\mydocs"
CDUP Change to Parent. Same as "CD .." Execute , "CDUP"
DELETE file1 Deletes the file specified in file1. Execute , "DELETE discard.txt"
DIR [ file1 ] Searches the directory specified in file1. If file1 isn't supplied, the current working directory is searched. Use the GetChunk method to return the data. Execute , "DIR /mydocs"
GET file1 file2 Retrieves the remote file specified in file1, and creates a new local file specified in file2. Execute , _
"GET getme.txt C:\gotme.txt"

MKDIR file1 Creates a directory as specified in file1. Success is dependent on user privileges on the remote host. Execute , "MKDIR /myDir"
PUT file1 file2 Copies a local file specified in file1 to the remote host specified in file2. Execute , _
"PUT C:\putme.txt /putme.txt"

PWD Print Working Directory. Returns the current directory name. Use the GetChunk method to return the data. Execute , "PWD"
QUIT Terminate current connection Execute , "QUIT"
RECV file1 file2 Same as GET. Execute , _
"RECV getme.txt C:\gotme.txt"

RENAME file1 file2 Renames a file. Success is dependent on user privileges on the remote host. Execute ,
"RENAME old.txt new.txt"

RMDIR file1 Remove directory. Success is dependent on user privileges on the remote host. Execute , "RMDIR oldDir"
SEND file1 Copies a file to the FTP site. (same as PUT.) Execute , _
"SEND C:\putme.txt /putme.txt"

SIZE file1 Returns the size of the file specified in file1. Execute "SIZE /largefile.txt"

Important   If your proxy server is a CERN proxy server, direct FTP connections (using the Execute method) are disallowed. In that case, to get a file, use the OpenURL method with the Open, Put, and Close statements, as shown earlier in "Saving to a File Using the OpenURL Method." You can also use the OpenURL method to get a directory listing by invoking the method and specifying the target directory as the URL.

Using the Execute Method with the HTTP Protocol
The HTTP protocol allows client machines to request data from the server using the GET, HEAD, POST, and PUT commands. These operations are shown in the following table:

Operation Description Example
GET Retrieves the file named in url. Execute "" & _
"/default.htm", "GET"

HEAD Retrieves only the headers of the file named in the URL property. Execute , "HEAD"
POST Provides additional data to support a request to the remote host. Execute , "POST", strFormData
PUT Replaces data at the specified URL. Execute , "PUT", "replace.htm"

The Common Gateway Interface and the Execute Method
Many World Wide Web sites offer the ability to search a database. This is accomplished by using the HTTP protocol's ability to send queries using the Common Gateway Interface (CGI).

It is not in the scope of this topic to explain the CGI; however, if you are familiar with the CGI, you can use the Execute method to construct an application that simulates the behavior of World Wide Web sites. For example, the code below shows a typical CGI query string:

This same query could be sent using the Execute method as shown below:

Dim strURL As String, strFormData As String
strURL = "//"
strFormData = "find=Hangzhou"
Inet1.Execute strURL, "POST", strFormData

If you are expecting a result back from a server (as in the example above), you must use the GetChunk method to retrieve the resulting HTML document.

Using the State Event with the GetChunk Method
When you are downloading data from a remote computer, an asynchronous connection will be made. For example, using the Execute method with the operation "GET", will cause the server to retrieve the requested file. When the entire file has been retrieved, the State argument will return icResponseCompleted (12). At that point, you can use the GetChunk method to retrieve the data from the buffer. This is shown in the example below:

Private Sub Inet1_StateChanged(ByVal State As Integer)
   Dim vtData As Variant ' Data variable.
   Select Case State
   ' ... Other cases not shown.
   Case icResponseCompleted ' 12
      ' Open a file to write to.
      Open txtOperation For Binary Access _
      Write As #intFile

      ' Get the first chunk. NOTE: specify a Byte
      ' array (icByteArray) to retrieve a binary file.
      vtData = Inet1.GetChunk(1024, icString)

      Do While LenB(vtData) > 0
         Put #intFile, , vtData
         ' Get next chunk.
         vtData = Inet1.GetChunk(1024, icString)
      Put #intFile, , vtData
      Close #intFile
   End Select
End Sub

Logging on to FTP Servers
FTP servers come in two flavors: public and private. Public servers, as suggested by the name, are open to anyone. Private servers, on the other hand, won't let you log on unless you are a bona fide user of the server. In either case, the FTP protocol demands that you supply a user name and a password. The two are used to authenticate a user and allow (or disallow) subsequent actions.

To log on to public servers the common practice is to log in as "anonymous," (UserName = "anonymous") and send your e-mail name as the password. However this process is simplified even further with the Internet Transfer control. By default, if you do not supply UserName and Password property values, the control sends "anonymous" as your UserName, and your e-mail name for the Password.

If you are logging on to a private server, simply set the UserName, Password, and URL properties as appropriate, and invoke the Execute method, as shown in the example below:

With Inet1
   .URL = ""
   .UserName = "John Smith"
   .Password = "mAuI&9$6"
   .Execute ,"DIR"   ' Returns the directory.
   .Execute ,"CLOSE" ' Close the connection.
End With

After you have invoked the Execute method, the FTP connection will remain open. You can then continue to use the Execute method to perform other FTP operations such as CD and GET. When you have completed the session, close the connection using the Execute method with the CLOSE operation. You can also close the connection automatically by changing the URL property, and invoking either the OpenURL or Execute method; such action will close the current FTP connection, and open the new URL.


Expert Comment

ID: 7163079
This should do it

With Inet1
  .URL = ""
  .UserName = "fran"
  .Password = "bane1"
  .Execute ,"PUT c:\blah\ICPC.csv /icpc/icpc.csv"
  .Execute ,"CLOSE" ' Close the connection.
End With
LVL 16

Accepted Solution

Richie_Simonetti earned 2000 total points
ID: 7163356
A long time ago i used:

' contents of script file, change accordingly:

cd usr2/home/omar
get stock.xls \\diego\ftp\unix_stk\16-07.xls

'bat file: change accordingly
ftp -s:script.scp


Hope it helps

Author Comment

ID: 7164220
Hi everyone, thanks very much for all the replies...I'll go through some of the points made...

I would like to use the Inet control, as this is what almost all webpages have pointed me towards, however when I try to use it I get the error message :

License information for this component not found....

I've tried to get it registered but failed...if anyone knows how this can be done (without having to spend) that'd be great.

Secondly, I don't think it's the contents of my script (could be wrong) that is incorrect, but that I don't know the syntax of the Shell command, is my syntax wrong/what is the correct syntax?

Thanks in anticipation....



Author Comment

ID: 7164899
I've realise it was n;t working because I had n't changed the directory for the file and that my syntax for the shell line was incorrect.  It's kinda hard to award the points for this as I think I mainly just figured it out.  If anyone can tell me how to get the Inet control registered then the points are yours.  If not then suggestions on how I should allocate these points appreciated.

Call Shell("ftp -n -s:" & "ICPC.txt", vbMaximizedFocus)
LVL 16

Expert Comment

ID: 7164946
Of course, you do what you think is better but i provided a valid command line.

Expert Comment

ID: 7164998

Are you using "Microsoft Internet Transfer Control 6.0 SP4"?

Within the "Project -> Components" menu?

Works fine on my machine

Expert Comment

ID: 7165005
Direct instructions..

Press Alt+P, C

Scroll down and check "Microsoft Internet Transfer Control 6.0 SP4"

Click "Ok"

Add it to the form...

Expert Comment

ID: 7165013
argh... that should be an 'O' instead of 'C'..

Author Comment

ID: 7165203
Thanks Richie, and too everyone else who contributed - I can now go on holiday and relax...

Though I never did solve the Inet control thing, I kept getting the same error, not sure if it was SP4 but it was definately Micorsoft Internet Transfer Control 6.0. Oh well, something to think about whilst on the beach...or maybe not.

LVL 16

Expert Comment

ID: 7165295
There is an article at MSDN regarding inet problem (and others controls too), let me see...
LVL 16

Expert Comment

ID: 7165941
see this:;en-us;Q194751
and links at bottom of that page.

Featured Post

Enroll in September's Course of the Month

This month’s featured course covers 16 hours of training in installation, management, and deployment of VMware vSphere virtualization environments. It's free for Premium Members, Team Accounts, and Qualified Experts!

Question has a verified solution.

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

There are many ways to remove duplicate entries in an SQL or Access database. Most make you temporarily insert an ID field, make a temp table and copy data back and forth, and/or are slow. Here is an easy way in VB6 using ADO to remove duplicate row…
This article describes how to use a set of graphical playing cards to create a Draw Poker game in Excel or VB6.
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Suggested Courses

660 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