17

質問は自明です。コードが1行の長さであるといいでしょう( " Process.Start("...")"?と関係があります)。私はウェブを調べましたが、古い例と(少なくとも私にとっては)機能しないような例しか見つかりませんでした。これをクラスライブラリで使用して、Gitコマンドを実行したいと思います(それが役立つ場合)。

4

5 に答える 5

24

この方法を試すことができます:

Public Class MyUtilities
    Shared Sub RunCommandCom(command as String, arguments as String, permanent as Boolean) 
        Dim p as Process = new Process() 
        Dim pi as ProcessStartInfo = new ProcessStartInfo() 
        pi.Arguments = " " + if(permanent = true, "/K" , "/C") + " " + command + " " + arguments 
        pi.FileName = "cmd.exe" 
        p.StartInfo = pi 
        p.Start() 
    End Sub
End Class

たとえば、次のように呼び出します。

MyUtilities.RunCommandCom("DIR", "/W", true)

編集: 1行の複数のコマンドの場合、キーは&|です。&&および|| コマンドコネクタ

  • A&B →コマンドAを実行してから、コマンドBを実行します。
  • A | B →コマンドAを実行し、その出力をすべてコマンドBの入力にリダイレクトします。
  • A && B →コマンドAを実行し、コマンドA実行後のエラーレベルを評価し、終了コード(エラーレベル)が0の場合のみ、コマンドBを実行します。
  • A || B →コマンドAを実行し、このコマンドの終了コードを評価し、0以外の場合は、コマンドBを実行します。
于 2012-04-21T21:26:00.057 に答える
15

これを試してコマンドを実行してからcmd終了することができます

Process.Start("cmd", "/c YourCode")

これを試してコマンドを実行し、cmdさらにコマンドを待つことができます

Process.Start("cmd", "/k YourCode")
于 2013-08-28T20:12:16.183 に答える
5

私はスティーブの答えに触発されましたが、それに少しフレアを加えたいと思いました。私は拡張メソッドを作成する前に作業を行うのが好きなので、後でメソッドを呼び出す作業が少なくなります。

たとえば、この呼び出しを行う代わりに、以下の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
于 2017-05-03T23:57:05.433 に答える
2
Sub systemcmd(ByVal cmd As String)
    Shell("cmd /c """ & cmd & """", AppWinStyle.MinimizedFocus, True)
End Sub
于 2016-10-13T20:13:15.793 に答える
0
Imports System.IO
Public Class Form1
    Public line, counter As String
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        counter += 1
        If TextBox1.Text = "" Then
            MsgBox("Enter a DNS address to ping")
        Else
            'line = ":start" + vbNewLine
            'line += "ping " + TextBox1.Text
            'MsgBox(line)
            Dim StreamToWrite As StreamWriter
            StreamToWrite = New StreamWriter("C:\Desktop\Ping" + counter + ".bat")
            StreamToWrite.Write(":start" + vbNewLine + _
                                "Ping -t " + TextBox1.Text)
            StreamToWrite.Close()
            Dim p As New System.Diagnostics.Process()
            p.StartInfo.FileName = "C:\Desktop\Ping" + counter + ".bat"
            p.Start()
        End If
    End Sub
End Class

これも機能します

于 2017-01-24T06:59:37.597 に答える