La question s'explique d'elle-même. Ce serait génial si le code était d'une ligne (quelque chose à voir avec "Process.Start("...")
"?). J'ai fait des recherches sur le Web, mais je n'ai trouvé que d'anciens exemples et de tels exemples qui ne fonctionnent pas (du moins pour moi). Je veux l'utiliser dans ma bibliothèque de classes, pour exécuter des commandes Git (si cela aide?).
Vous pouvez essayer cette méthode:
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
appelez par exemple de cette manière:
MyUtilities.RunCommandCom("DIR", "/W", true)
EDIT: Pour la commande multiple sur une ligne, la clé est la | et || connecteurs de commande
Vous pouvez essayer ceci pour exécuter la commande, puis cmd
quitte
Process.Start("cmd", "/c YourCode")
Vous pouvez essayer ceci pour exécuter la commande et laisser cmd
attendre plus de commandes
Process.Start("cmd", "/k YourCode")
J'ai été inspiré par la réponse de Steve mais j'ai pensé y ajouter un peu d'éclat. J'aime faire le travail avant d'écrire des méthodes d'extension donc plus tard j'ai moins de travail à faire pour appeler la méthode.
Par exemple avec la version modifiée de la réponse de Steve ci-dessous, au lieu de faire cet appel ...
MyUtilities.RunCommandCom("DIR", "/W", true)
Je peux simplement taper la commande et l'appeler à partir de mes chaînes comme ceci ...
Directement dans le code.
Call "CD %APPDATA% & TREE".RunCMD()
OR
À partir d'une variable.
Dim MyCommand = "CD %APPDATA% & TREE"
MyCommand.RunCMD()
OR
À partir d'une zone de texte.
textbox.text.RunCMD(WaitForProcessComplete:=True)
Les méthodes d'extension devront être placées dans un module public et porter l'attribut <Extension>
Sur le sous-module. Vous voudrez également ajouter Imports System.Runtime.CompilerServices
En haut de votre fichier de code.
Il y a beaucoup d'informations sur SO sur les méthodes d'extension si vous avez besoin d'aide supplémentaire.
Méthode d'extension
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
Sub systemcmd(ByVal cmd As String)
Shell("cmd /c """ & cmd & """", AppWinStyle.MinimizedFocus, True)
End Sub
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
Ça marche aussi