如何在vb.net中使用命令行

时间:2015-12-24 05:49:37

标签: vb.net command-line cmd

我正在开发一个Windows应用程序,它将使用支持命令行的pdf2text pilot软件。在此应用程序中,用户需要指定pdf文件的位置。我能够打开cmd,但无法将命令传递给它,或者某种程度上我的命令没有被执行。

Imports System
Imports System.IO
Imports System.Diagnostics.Process
Imports System.Diagnostics.ProcessStartInfo

Public Class EDCS

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs)     Handles Button1.Click
    Dim dlgrslt As DialogResult = OpenFileDialog1.ShowDialog()
    Dim fnames As String() = OpenFileDialog1.FileNames
    Dim txtfnames As String

    For i = 0 To fnames.Length - 1
        If TextBox1.Text = "" Then
            TextBox1.Text = fnames(i)
        Else
            TextBox1.Text = TextBox1.Text + " / " + fnames(i)
        End If
        txtfnames = fnames(i).Replace(".pdf", ".txt")
        File.Create(txtfnames).Dispose()

        Dim convertcommand As String = "textextract """ & fnames(i) & """     /to """ & txtfnames & """"

        '/c will exit cmd and /k will keep it open
        'Shell("cmd.exe /c textextract "C:\Users\user\Desktop\ Part 1.pdf" /to " C:\Users\user\Desktop\ Part 1.txt"")

        'SendKeys.Send(convertcommand)
        'SendKeys.Send("{ENTER}")

        Dim p As New Process
        p.StartInfo.FileName = "cmd.exe"
        'p.StartInfo.WorkingDirectory = "C:\Program Files (x86)\Two Pilots\PDF2Text Pilot"
        'p.StartInfo.Arguments = "textextract "C:\Users\user\Desktop\ Part 1.pdf" /to " C:\Users\user\Desktop\ Part 1.txt""
        p.StartInfo.UseShellExecute() = False
        p.StartInfo.RedirectStandardInput = True
        p.StartInfo.RedirectStandardOutput = True
        p.Start()
        p.StandardInput.WriteLine(convertcommand)

        'Dim process As New Process()
        'process.StartInfo.FileName = "cmd.exe "
        'process.StartInfo.Verb = "runas"
        'process.StartInfo.UseShellExecute = False
        'process.StartInfo.RedirectStandardInput = True
        'process.StartInfo.RedirectStandardOutput = True
        'process.Start()

        'process.StandardInput.WriteLine("textextract "C:\Users\user\Desktop\ Part 1.pdf" /to " C:\Users\user\Desktop\ Part 1.txt"")
        'process.StandardInput.WriteLine("exit")
        'process.Close()

              Next
End Sub
End Class

操作系统:Windows 7 vb.net开发人员

先谢谢

1 个答案:

答案 0 :(得分:0)

好的,在这里,这应该工作,结果是pdf2text有一个错误,但我设法通过在命令运行之前传递几个空行然后还添加等待实用程序来使其工作在命令提示符关闭之前完成。我猜你可能需要增加等待大文件的时间。我在命令提示符中得到一些“句柄无效”消息,我怀疑它们也来自pdf2text,但忽略它们似乎是安全的。

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim dlgrslt As DialogResult = OpenFileDialog1.ShowDialog()
        Dim fnames As String() = OpenFileDialog1.FileNames
        Dim txtfnames As String

        For i = 0 To fnames.Length - 1
            If TextBox1.Text = "" Then
                TextBox1.Text = fnames(i)
            Else
                TextBox1.Text = TextBox1.Text + " / " + fnames(i)
            End If
            txtfnames = fnames(i).Replace(".pdf", ".txt")
            File.Create(txtfnames).Dispose()

            Dim convertcommand As String = "textextract.exe """ & fnames(i) & """     /to """ & txtfnames & """"

            Dim p As New Process
            p.StartInfo.FileName = "cmd.exe"
            p.StartInfo.Arguments = " /k"
            p.StartInfo.UseShellExecute = False
            p.StartInfo.RedirectStandardInput = True
            p.StartInfo.RedirectStandardOutput = False
            p.Start()

            Using sw As StreamWriter = p.StandardInput
                If sw.BaseStream.CanWrite Then
                    sw.WriteLine()
                    sw.WriteLine()
                    sw.WriteLine(convertcommand)
                    p.WaitForExit(3000)
                End If
            End Using
        Next
    End Sub