ACC: Using the Shell() Function to Run MS-DOS Commands

Last reviewed: June 8, 1997
Article ID: Q116384
The information in this article applies to:
  • Microsoft Access versions 1.0, 1.1, 2.0

SUMMARY

Moderate: Requires basic macro, coding, and interoperability skills.

This article describes and gives an example of how you can use the Shell() function in Access Basic to run intrinsic MS-DOS commands, such as Copy, Dir, Del, and so on.

This article assumes that you are familiar with Access Basic and with creating Microsoft Access applications using the programming tools provided with Microsoft Access. For more information about Access Basic, please refer to the "Building Applications" manual.

MORE INFORMATION

The Shell() function in Access Basic requires that you specify a file that has an extension of .EXE, .COM, .BAT or .PIF. These file types are registered as executable applications in the listed locations in the following operating environments:

   Windows 3.x and Windows for Workgroups 3.x
   ------------------------------------------
   Filename: WIN.INI
   Section: [windows]
   Item: Programs=com exe bat pif

   Windows NT 3.x
   ----------------------------------------------------------------------
   Filename: REGEDT32.EXE
   Registry Key:
   HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows
   Value: Programs
   Type: REG_SZ
   Item: com exe bat pif cmd

Using the Shell() function to run MS-DOS commands requires the use of the COMMAND.COM program. The COMMAND.COM program supports two optional parameters that you can use to run an intrinsic (or built in) MS-DOS function:
  • COMMAND /C: This syntax runs a built in function, and then closes
                    the MS-DOS session.
    
    
  • COMMAND /K: This syntax runs a built in function and returns the
                    MS-DOS command prompt.
    
    

Example

To create a sample application that demonstrates the use of these techniques, follow these steps:

  1. Create a module and type the following line in the Declarations section:

          Option Explicit
    

  2. Type the following two functions:

          Function ShellDOS_Exit() As Integer
    
             On Local Error Goto ShellDOS_Exit_Err
             Dim MyCommand As String
             Dim TaskId As Integer
             ' Create command string to show the contents of current
             ' directory. Upon completion the window closes.
             MyCommand = "COMMAND.COM /C DIR /P"
             TaskId = Shell(MyCommand, 1)
             ShellDOS_Exit = True
          ShellDOS_Exit_End:
             Exit Function
          ShellDOS_Exit_Err:
             MsgBox Error$
             Resume ShellDOS_Exit_End
          End Function
    
          Function ShellDOS_Stay() As Integer
             On Local Error Goto ShellDOS_Stay_Err
             Dim MyCommand As String
             Dim TaskId As Integer
             ' Create command string to show the contents of current
             ' directory. Upon completion the window remain opens
             ' at the MS-DOS prompt.
             MyCommand = "COMMAND.COM /K DIR /P"
             TaskId = Shell(MyCommand, 1)
             ShellDOS_Stay = True
          ShellDOS_Stay_End:
             Exit Function
          ShellDOS_Stay_Err:
             MsgBox Error$
             Resume ShellDOS_Stay_End
          End Function
    
    

  3. To test the first function, type the following line in the Immediate window, and then press ENTER:

          ? ShellDOS_Exit()
    

    Note that the MS-DOS window displays the contents of the current directory (prompting you to press a key if the contents of the directory exceeds one display page) and returns True as a result of the function.

  4. To test the second function, type the following line in the Immediate window, and then press ENTER:

          ? ShellDOS_Stay()
    

    Note that the MS-DOS window displays the contents of the current directory (prompting you to press a key if the contents of the directory exceeds one display page) and then keeps the MS-DOS session open and active, displaying the MS-DOS command prompt. The function also returns True as a result.

REFERENCES

Microsoft Access "Building Applications," version 2.0, Chapter 5, "Access Basic Fundamentals," pages 113-132

Microsoft Access "Language Reference," version 2.0, "Shell Function," pages 568-569

For more information about the Shell() function, search for "Shell," and then "Shell Function" using the Microsoft Access Help menu.

For more information about using MS-DOS commands in Access Basic and on how to add additional functionality to these routines, please see the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q99940
   TITLE     : ACC: How to Wait for a Shelled Process to Finish
 

	
	


Keywords : kbprg PgmHowto
Version : 1.0 1.1 2.0
Platform : WINDOWS
Hardware : X86
Issue type : kbhowto


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: June 8, 1997
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.