Steve 的回答启发了我,但我想我会为它添加一些闪光点。
我喜欢在编写扩展方法之前先做这些工作,所以以后调用该方法的工作就更少了。
例如,使用下面史蒂夫答案的修改版本,而不是拨打这个电话......
MyUtilities.RunCommandCom("DIR", "/W", true)
我实际上可以只输入命令并像这样从我的字符串中调用它...
直接在代码中。
Call "CD %APPDATA% & TREE".RunCMD()
或
来自一个变量。
Dim MyCommand = "CD %APPDATA% & TREE"
MyCommand.RunCMD()
或
来自文本框。
textbox.text.RunCMD(WaitForProcessComplete:=True)
扩展方法需要放在公共模块中,并在子模块上携带<Extension> 属性。您还需要将Imports System.Runtime.CompilerServices 添加到代码文件的顶部。
如果您需要进一步的帮助,有大量关于扩展方法的 SO 信息。
扩展方法
Public Module Extensions
''' <summary>
''' Extension method to run string as CMD command.
''' </summary>
''' <param name="command">[String] Command to run.</param>
''' <param name="ShowWindow">[Boolean](Default:False) Option to show CMD window.</param>
''' <param name="WaitForProcessComplete">[Boolean](Default:False) Option to wait for CMD process to complete before exiting sub.</param>
''' <param name="permanent">[Boolean](Default:False) Option to keep window visible after command has finished. Ignored if ShowWindow is False.</param>
<Extension>
Public Sub RunCMD(command As String, Optional ShowWindow As Boolean = False, Optional WaitForProcessComplete As Boolean = False, Optional permanent As Boolean = False)
Dim p As Process = New Process()
Dim pi As ProcessStartInfo = New ProcessStartInfo()
pi.Arguments = " " + If(ShowWindow AndAlso permanent, "/K", "/C") + " " + command
pi.FileName = "cmd.exe"
pi.CreateNoWindow = Not ShowWindow
If ShowWindow Then
pi.WindowStyle = ProcessWindowStyle.Normal
Else
pi.WindowStyle = ProcessWindowStyle.Hidden
End If
p.StartInfo = pi
p.Start()
If WaitForProcessComplete Then Do Until p.HasExited : Loop
End Sub
End Module