运行单空格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