Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 150462
  • Last Modified:

How to Run DOS Command line Using VB

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
Henry2003
Asked:
Henry2003
1 Solution
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
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
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
You may have to give a fully qualified path to your "gpg" app.

Idle_Mind
0
 
TooKoolKrisCommented:
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
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.

 
--laser--Commented:
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
 
josebirlaCommented:
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
 
josebirlaCommented:

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
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
--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
 
Henry2003Author Commented:
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
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
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
 
xThorxCommented:
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
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
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
 
Mike TomlinsonMiddle School Assistant TeacherCommented:
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
 
DanRollinsCommented:
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
 
iceman1188Commented:
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
 
JudaBCommented:
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
 
mernionCommented:
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
 
aftab_kashifCommented:
just try running the shell command.
Hope this will help you
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

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