运行单空格CMD命令并返回输出的vb.net程序

运行单空格CMD命令并返回输出的vb.net程序,vb.net,visual-studio,cmd,Vb.net,Visual Studio,Cmd,所以我的问题是我从网上找到的代码。该代码在命令参数格式中仅使用一个空格的命令时运行良好 我想编辑代码,以便可以向命令添加选项,如youtube dl[command]-I[options]URL[URL]。该命令将有3个空格,但代码只支持一个空格 需要如何编辑代码以支持发送到命令进程的多个参数 Public Class Form1 Private psi As ProcessStartInfo Private cmd As Process Private Delegate Sub InvokeW

所以我的问题是我从网上找到的代码。该代码在
命令参数
格式中仅使用一个空格的命令时运行良好

我想编辑代码,以便可以向命令添加选项,如
youtube dl[command]-I[options]URL[URL]
。该命令将有3个空格,但代码只支持一个空格

需要如何编辑代码以支持发送到命令进程的多个参数

Public Class Form1
Private psi As ProcessStartInfo
Private cmd As Process
Private Delegate Sub InvokeWithString(ByVal text As String)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim Folder, URL As String
    Folder = txtFolder.Text
    URL = txtUrl.Text
    txtCommand.Text = "C:\Users\Merskies\Desktop\Youtube-dl\youtube-dl.exe -i -o D:\YoutubeDL\" & Folder & "\%%(title)s.%%(ext)s " & URL
    Try
        cmd.Kill()
    Catch ex As Exception
    End Try
    txtOutput.Clear()
    If txtCommand.Text.Contains(" ") Then
        psi = New ProcessStartInfo(txtCommand.Text.Split(" ")(0), txtCommand.Text.Split(" ")(1))
    Else
        psi = New ProcessStartInfo(txtCommand.Text$)
    End If
    Dim systemencoding As System.Text.Encoding
    System.Text.Encoding.GetEncoding(Globalization.CultureInfo.CurrentUICulture.TextInfo.OEMCodePage)
    With psi
        .UseShellExecute = False
        .RedirectStandardError = True
        .RedirectStandardOutput = True
        .RedirectStandardInput = True
        .CreateNoWindow = True
        .StandardOutputEncoding = systemencoding
        .StandardErrorEncoding = systemencoding
    End With
    cmd = New Process With {.StartInfo = psi, .EnableRaisingEvents = True}
    AddHandler cmd.ErrorDataReceived, AddressOf Async_Data_Received
    AddHandler cmd.OutputDataReceived, AddressOf Async_Data_Received
    cmd.Start()
    cmd.BeginOutputReadLine()
    cmd.BeginErrorReadLine()
End Sub
Private Sub Async_Data_Received(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
    Me.Invoke(New InvokeWithString(AddressOf Sync_Output), e.Data)
End Sub
Private Sub Sync_Output(ByVal text As String)
    txtOutput.AppendText(text & Environment.NewLine)
    txtOutput.ScrollToCaret()
End Sub
End Class
私有子按钮1\u单击(ByVal发送者作为System.Object,ByVal e作为System.EventArgs)处理按钮1。单击
Dim文件夹,URL为字符串
Folder=txtFolder.Text
URL=txtUrl.Text
txtCommand.Text=“C:\Users\Merskies\Desktop\Youtube dl\Youtube dl.exe”
dim参数为string=“-i-od:\YoutubeDL\”&文件夹和“\%%(title)s.%(ext)s”&URL
尝试
cmd.Kill()
特例
结束尝试
txtOutput.Clear()
如果参数为“”,则
psi=新的ProcessStartInfo(txtCommand.Text,参数)
其他的
psi=新的ProcessStartInfo(txtCommand.Text)
如果结束
将systemencoding设置为System.Text.Encoding
System.Text.Encoding.GetEncoding(Globalization.CultureInfo.CurrentUICulture.TextInfo.OEMCodePage)
带psi
.UseShellExecute=False
.RedirectStandardError=True
.RedirectStandardOutput=True
.RedirectStandardInput=True
.CreateNoWindow=True
.StandardOutputEncoding=系统编码
.StandardErrorEncoding=systemencoding
以
cmd=具有{.StartInfo=psi、.EnableRaisingEvents=True}的新进程
AddHandler cmd.ErrorDataReceived,接收异步数据的地址
AddHandler cmd.OutputDataReceived,接收异步数据的地址
cmd.Start()
cmd.BeginOutputReadLine()
cmd.BeginErrorReadLine()
端接头
接收到私有子异步数据(ByVal发送方作为对象,ByVal e作为DataReceivedEventArgs)
调用(新的InvokeWithString(同步输出的地址),例如Data)
端接头
专用子同步_输出(ByVal文本作为字符串)
txtOutput.AppendText(text&Environment.NewLine)
txtOutput.ScrollToCaret()
端接头
末级

请将代码作为文本复制并粘贴到问题中。没有图形。没有外部链接。请确保这是一个我正在努力使代码适合于一个代码框。我刚加入社区,这是我的第一篇帖子。对不起。欢迎来到SO。当你进入一个新的社区时,熟悉任何和所有可能适用的契约、条件和限制是很好的。这里的这一行给您带来了麻烦:psi=newprocessstartinfo(txtCommand.Text.Split(“”)(0),txtCommand.Text.Split(“”)(1)),它只返回第一个开关/arg@Merskies请看这里,并从页面顶部查找大约1/4的参数。这是你感兴趣的部分。传递所有控件,而不是只传递一个。在创建控件时,应养成命名控件的习惯。这是一个好习惯,不能失去。当您只知道button1的名称时,调试就更容易了。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim Folder, URL As String
    Folder = txtFolder.Text
    URL = txtUrl.Text
    txtCommand.Text = "C:\Users\Merskies\Desktop\Youtube-dl\youtube-dl.exe"
    dim Arguments as string ="-i -o D:\YoutubeDL\" & Folder & "\%%(title)s.%%(ext)s " & URL
    Try
        cmd.Kill()
    Catch ex As Exception
    End Try
    txtOutput.Clear()
    If Arguments <> "" Then
        psi = New ProcessStartInfo(txtCommand.Text, Arguments)
    Else
        psi = New ProcessStartInfo(txtCommand.Text)
    End If
    Dim systemencoding As System.Text.Encoding
    System.Text.Encoding.GetEncoding(Globalization.CultureInfo.CurrentUICulture.TextInfo.OEMCodePage)
    With psi
        .UseShellExecute = False
        .RedirectStandardError = True
        .RedirectStandardOutput = True
        .RedirectStandardInput = True
        .CreateNoWindow = True
        .StandardOutputEncoding = systemencoding
        .StandardErrorEncoding = systemencoding
    End With
    cmd = New Process With {.StartInfo = psi, .EnableRaisingEvents = True}
    AddHandler cmd.ErrorDataReceived, AddressOf Async_Data_Received
    AddHandler cmd.OutputDataReceived, AddressOf Async_Data_Received
    cmd.Start()
    cmd.BeginOutputReadLine()
    cmd.BeginErrorReadLine()
End Sub
Private Sub Async_Data_Received(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
    Me.Invoke(New InvokeWithString(AddressOf Sync_Output), e.Data)
End Sub
Private Sub Sync_Output(ByVal text As String)
    txtOutput.AppendText(text & Environment.NewLine)
    txtOutput.ScrollToCaret()
End Sub
End Class