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

x
?
Solved

How to Run DOS Command line Using VB

Posted on 2003-12-02
17
Medium Priority
?
150,439 Views
Last Modified: 2012-05-04
Hello all!

I want to run this DOS command line using VB.
gpg -o c:\gnupg\outsourceone_rsmd_mr_elig.834c.gpg -r A01183A7 -e "f:\servcent\vendor\
bc ca\outsourceone_rsmd_mr_elig.834c"

I used to manually run it in DOS Commmand. I want to run this from my VB program but I don't have any clue.
Your help is very appreciate

Thank you in advance.

0
Comment
Question by:Henry2003
[X]
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
17 Comments
 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 9862854
Here is one method:

Private Sub Command1_Click()
    Dim retval As Double
    retval = Shell("gpg -o c:\gnupg\outsourceone_rsmd_mr_elig.834c.gpg -r A01183A7 -e ""f:\servcent\vendor\" & _
        "bc ca\outsourceone_rsmd_mr_elig.834c""", vbNormalFocus)
End Sub

Idle_Mind
0
 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 9862858
You may have to give a fully qualified path to your "gpg" app.

Idle_Mind
0
 
LVL 9

Expert Comment

by:TooKoolKris
ID: 9862944
Just in case you are using a script (.vbs)

set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run ("cmd /c gpg -o c:\gnupg\outsourceone_rsmd_mr_elig.834c.gpg -r A01183A7 -e ""f:\servcent\vendor\" & _
        "bc ca\outsourceone_rsmd_mr_elig.834c""",
0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
LVL 4

Accepted Solution

by:
--laser-- earned 400 total points
ID: 9864331
hey try this, it creates a batch file with your command in it when you press the cmdcreate and when you press the cmdrun it executes the batch file and deletes the batch file afterwards, i hope this helps



Private Sub CmdCreate_Click()
On Error Resume Next
    Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
    Set a = fso.CreateTextFile("c:\mybat.bat", True)
    a.WriteLine ("gpg -o c:\gnupg\outsourceone_rsmd_mr_elig.834c.gpg -r A01183A7 -e ""f:\servcent\vendor\bc ca\outsourceone_rsmd_mr_elig.834c")
End Sub

Private Sub CmdRun_Click()
Dim aa
    aa = Shell("c:\mybat.bat", vbNormalFocus)
    MsgBox "batch file executed"
    Kill ("c:\mybat.bat")
End Sub
0
 

Expert Comment

by:josebirla
ID: 9865449
Just use the following program


Public Type STARTUPINFO
    cb              As Long
    lpReserved      As Long
    lpDesktop       As Long
    lpTitle         As Long
    dwX             As Long
    dwY             As Long
    dwXSize         As Long
    dwYSize         As Long
    dwXCountChars   As Long
    dwYCountChars   As Long
    dwFillAttribute As Long
    dwFlags         As Long
    wShowWindow     As Integer
    cbReserved2     As Integer
    lpReserved2     As Long
    hStdInput       As Long
    hStdOutput      As Long
    hStdError       As Long
End Type

Public Type PROCESS_INFORMATION
    hProcess    As Long
    hThread     As Long
    dwProcessID As Long
    dwThreadID  As Long
End Type

Declare Function CreateProcessA Lib "Kernel32" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Public Sub StartProcess(CommandLine As String, Optional Hide As Boolean = False)
    Const STARTF_USESHOWWINDOW As Long = &H1
    Const SW_HIDE As Long = 0
   
    Dim proc As PROCESS_INFORMATION
    Dim Start As STARTUPINFO

    'Initialize the STARTUPINFO structure:
    Start.cb = Len(Start)
    If Hide Then
        Start.dwFlags = STARTF_USESHOWWINDOW
        Start.wShowWindow = SW_HIDE
    End If
    'Start the shelled application:
    CreateProcessA 0&, CommandLine, 0&, 0&, 1&, _
        NORMAL_PRIORITY_CLASS, 0&, 0&, Start, proc

End Sub

0
 

Expert Comment

by:josebirla
ID: 9865465

Public Type STARTUPINFO
    cb              As Long
    lpReserved      As Long
    lpDesktop       As Long
    lpTitle         As Long
    dwX             As Long
    dwY             As Long
    dwXSize         As Long
    dwYSize         As Long
    dwXCountChars   As Long
    dwYCountChars   As Long
    dwFillAttribute As Long
    dwFlags         As Long
    wShowWindow     As Integer
    cbReserved2     As Integer
    lpReserved2     As Long
    hStdInput       As Long
    hStdOutput      As Long
    hStdError       As Long
End Type

Public Type PROCESS_INFORMATION
    hProcess    As Long
    hThread     As Long
    dwProcessID As Long
    dwThreadID  As Long
End Type

Declare Function CreateProcessA Lib "Kernel32" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long

Public Sub StartProcess(CommandLine As String, Optional Hide As Boolean = False)
    Const STARTF_USESHOWWINDOW As Long = &H1
    Const SW_HIDE As Long = 0
   
    Dim proc As PROCESS_INFORMATION
    Dim Start As STARTUPINFO

    'Initialize the STARTUPINFO structure:
    Start.cb = Len(Start)
    If Hide Then
        Start.dwFlags = STARTF_USESHOWWINDOW
        Start.wShowWindow = SW_HIDE
    End If
    'Start the shelled application:
    CreateProcessA 0&, CommandLine, 0&, 0&, 1&, _
        NORMAL_PRIORITY_CLASS, 0&, 0&, Start, proc

End Sub


Private Sub Command1_Click()
call StartProcess "cmd"
End Sub

0
 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 9867272
--laser--

If your going to use Shell(),

Private Sub CmdRun_Click()
    Dim aa
    aa = Shell("c:\mybat.bat", vbNormalFocus)
    MsgBox "batch file executed"
    Kill ("c:\mybat.bat")
End Sub

why bother making the batch file?  This the same thing in one line:

Private Sub Command1_Click()
    Dim retval As Double
    retval = Shell("gpg -o c:\gnupg\outsourceone_rsmd_mr_elig.834c.gpg -r A01183A7 -e ""f:\servcent\vendor\" & _
        "bc ca\outsourceone_rsmd_mr_elig.834c""", vbNormalFocus)
End Sub

Idle_Mind
0
 
LVL 1

Author Comment

by:Henry2003
ID: 9878555
Hello laser!

I try to execute the .bat file using Shell function as your tell me to do. something like:

Set a = fso.CreateTextFile("C:\mybat.bat", True)
      a.WriteLine ("cd c:\gnupg")
      a.WriteLine ("del *.gpg")
      a.WriteLine ("gpg -o c:\gnupg\" & Format(Now, "MMDDYY") & "MBI.mbi.gpg -u FC1459C7 -r A01183A7 -e ""f:\servcent\vendor\MBI\" & Format(Now, "MMDDYY") & "MBI.mbi")

 aa = Shell("c:\mybat.bat", vbNormalFocus)

I got the error on last line "Invalid procedure call or argument".

My conerning is Shell function only execute the .exe file only?

Please help
Thanks!
Henry

0
 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 9878800
You are missing the quote on the end of your command line.

a.WriteLine ("gpg -o c:\gnupg\" & Format(Now, "MMDDYY") & "MBI.mbi.gpg -u FC1459C7 -r A01183A7 -e ""f:\servcent\vendor\MBI\" & Format(Now, "MMDDYY") & "MBI.mbi")

should be

a.WriteLine ("gpg -o c:\gnupg\" & Format(Now, "MMDDYY") & "MBI.mbi.gpg -u FC1459C7 -r A01183A7 -e ""f:\servcent\vendor\MBI\" & Format(Now, "MMDDYY") & "MBI.mbi""")

Try that and see if it makes a difference.

Idle_Mind
0
 
LVL 1

Expert Comment

by:xThorx
ID: 9881208
When you use shell command, it's safer to use shortname path to the file. It seems to me that "outsourceone_rsmd_mr_elig.834c.gpg" is too long to be well known. Try to give shortname first like "outsou~1.gpg".
0
 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 9882447
Here is how to do it using short file names without a batch file.  It uses the GetShortPathName() API.

Idle_Mind

Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal lBuffer As Long) As Long

Private Sub Command1_Click()
    Dim files As New Collection
    Dim file As Variant
    Dim path As String, pattern As String
   
    Dim retval As Double
    Dim cmd As String
    Dim file1 As String
    Dim file2 As String
   
    ' Delete all .gpg files in c:\qgnupg\
    path = "c:\gnupg\"
    pattern = "*.gpg"
    Set files = getFilesInDirectory(path, pattern)
    For Each file In files
            Kill path & file
    Next file
       
    ' change directory and execute command line using short file names
    ChDir path
    file1 = GetShortPath("c:\gnupg\" & Format(Now, "MMDDYY") & "MBI.mbi.gpg")
    file2 = GetShortPath("f:\servcent\vendor\MBI\" & Format(Now, "MMDDYY") & "MBI.mbi")
    cmd = "gpg -o " & file1 & " -u FC1459C7 -r A01183A7 -e """ & file2 & """"
    retval = Shell(cmd, vbNormalFocus)
End Sub

Private Function getFilesInDirectory(targetDirectory As String, filePattern As String) As Collection
    Dim fileCollection As New Collection
    Dim curFile As String
   
    On Error GoTo noSuchDirectory
    ChDir targetDirectory
   
    On Error GoTo 0
    curFile = Dir(filePattern)
    Do Until curFile = ""
        fileCollection.Add curFile, curFile
        curFile = Dir()
    Loop
    Set getFilesInDirectory = fileCollection
    Exit Function
   
noSuchDirectory:
    MsgBox "Invalid Directory: " & targetDirectory
    Set getFilesInDirectory = fileCollection
End Function

Private Function GetShortPath(longPath As String) As String
    Dim chars As Long, shortPath As String
    shortPath = String$(Len(longPath), 0)
    chars = GetShortPathName(longPath, shortPath, Len(shortPath))
    GetShortPath = Left$(shortPath, chars)
End Function
0
 
LVL 86

Expert Comment

by:Mike Tomlinson
ID: 9882485
Doh...since I converted the filenames to short ones, we no longer need the quotes around the second file name.  It should be this then:

cmd = "gpg -o " & file1 & " -u FC1459C7 -r A01183A7 -e " & file2

It should work as it was though.

Idle_Mind
0
 
LVL 49

Expert Comment

by:DanRollins
ID: 9887399
You could write a batch file that would wite a batch file that would write a batch file that would execute the program.  Then your program could execute the first batch file which would run the second batch file which would write the third batch file which could (and here's the beatuy of the scheme) then *run itself*.  That would be pretty cool.  Do I get the points?
0
 

Expert Comment

by:iceman1188
ID: 11444780
hi..

i have use the following
 retval = Shell("net use z: \\pc19\test password /user:pc19\loginname", vbNormalFocus)

it work..  but how to i run it a silent mode??

thks..
 
0
 

Expert Comment

by:JudaB
ID: 11532216
I Am running a VB Script  that call a batch file  like this

      run = WshShell.Run ("\\sh-nav\vplogon\vplogon.bat",1,false)


But when the Batch is finished i have a problem the  "MS Dos window" is still on the user desktop and he have to  close it Manualy ..


How can i set that the Window will be closed automaticly ?   like (Close on exit flag)
0
 

Expert Comment

by:mernion
ID: 12554840
Why when i do: Shell("c:\mybat.bat", vbMaximizedFocus) i get an error (i can't say it exactly because it is in greek) that says that it can't use the file because it is used by another proccess???
0
 

Expert Comment

by:aftab_kashif
ID: 13576809
just try running the shell command.
Hope this will help you
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

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

The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
I was working on a PowerPoint add-in the other day and a client asked me "can you implement a feature which processes a chart when it's pasted into a slide from another deck?". It got me wondering how to hook into built-in ribbon events in Office.
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…
Suggested Courses

721 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