Programm mit Argumenten starten

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von kwon.

    Programm mit Argumenten starten

    Hallo,
    ich würde gerne das Programm PDFCreator mit Argumenten starten.
    Ich habe mich an einem Beispiel aus dem Forum orientiert:

    VB.NET-Quellcode

    1. Dim pfadEinlesen As String = "D:\Daten\aktuell_nicht_in_Cloud\Scan-Ordner\_in pdf umwandeln\"
    2. Dim pfadFertig As String = "D:\Daten\aktuell_nicht_in_Cloud\Scan-Ordner\_pdf erzeugt\"
    3. Dim p As New Process
    4. 'p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    5. p.StartInfo.FileName = "C:\Program Files\PDFCreator\pdfcreator-cli.exe"
    6. p.StartInfo.Arguments = "PrintFile /File=" & pfadEinlesen & "gut.txt/ OutputFile=" & pfadFertig & "gut.pdf"
    7. p.Start()


    Leider öffnet und schließt sich die cmd nur kurz...

    Auf der Seite von PDFCreator wird folgende Syntax vorgeschlagen:
    pdfcreator-cli.exe PrintFile /File="C:\test.doc" /OutputFile="C:\test.pdf"

    Was mache ich falsch?
    Ich bitte um Hilfe...
    Wenn Du in Zeile#7 eine Haltepunkt setzt und mal bei p.StartInfo.Arguments reinschaust, wirst Du sehen, dass Du drinhast:
    C:\Program Files\PDFCreator\pdfcreator-cli.exe PrintFile /File=D:\Daten\aktuell_nicht_in_Cloud\Scan-Ordner\_in pdf umwandeln\gut.txt/ OutputFile=D:\Daten\aktuell_nicht_in_Cloud\Scan-Ordner\_pdf erzeugt\gut.pdf
    die Syntax aber verlangt
    C:\Program Files\PDFCreator\pdfcreator-cli.exe PrintFile /File="D:\Daten\aktuell_nicht_in_Cloud\Scan-Ordner\_in pdf umwandeln\gut.txt" /OutputFile="D:\Daten\aktuell_nicht_in_Cloud\Scan-Ordner\_pdf erzeugt\gut.pdf"
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Jou.
    @kwon Pfade, in denen Leerzeichen vorkommen, müssen on Apostrophen eingeschlossen sein, sonst werden sie als separate und somit falsche Argumente erkannt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,
    das Umwandeln von 1 Datei habe ich geschafft, beim Umwandeln (zusammenfügen) von mehreren Dateien bräuchte ich noch etwas Hilfe:
    Es geht um den Else-Zweig (anzdateien<>1, MergeFiles):

    Das soll im Programm ankommen:
    pdfcreator-cli.exe MergeFiles /OutputFile="C:\test-converted.pdf" "C:\file1.pdf" "C:\file2.ps" (bei 2 Dateien)
    pdfcreator-cli.exe MergeFiles /OutputFile="C:\test-converted.pdf" "C:\file1.pdf" "C:\file2.ps" "C:\file3.ps" (bei 3 Dateien) usw...

    Dazu erzeuge ich stringEin:
    bei 2 Dateien ist 1 trennendes Leerzeichen in stringEin vorhanden
    bei 3 Dateien sind 2 trennende Leerzeichen in stringEin vorhanden, usw...

    Leider bekomme ich es (nach langem versuchen) nicht hin...

    Könntet ihr mir bitte einen Hinweis geben, wie ich das mit den trennenden Leerzeichen hinbekommen kann?
    (ich meine stringEin, dass 3 Dateien 2 Leerzeichen haben, oder 5 Dateien 4 Leerzeichen haben...)

    Vielen Dank!


    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim pfadEinlesen As String = "C:\a\"
    3. Dim pfadFertig As String = "C:\b\"
    4. Dim stringEin As String
    5. Dim ordnereinlesen As New DirectoryInfo(pfadEinlesen)
    6. 'Dim files() As String = IO.Directory.GetFiles(pfadEinlesen)
    7. Dim dateinameA As String = "", dateinameB As String = ""
    8. Dim pdfName As String
    9. Dim p As Process = New Process
    10. Dim anzDateien As Integer = 0
    11. 'Dim WshNetwork As Object,
    12. pdfName = InputBox("Wie soll das pdf heißen?")
    13. 'stringEin erzeugen
    14. For Each file In ordnereinlesen.GetFiles
    15. If dateinameA = "" Then
    16. dateinameA = file.FullName
    17. Else
    18. dateinameA = file.FullName & "' '"
    19. dateinameB = dateinameA & file.FullName
    20. End If
    21. Next
    22. stringEin = dateinameB
    23. MessageBox.Show(stringEin)
    24. anzDateien = ordnereinlesen.GetFiles.Count
    25. If anzDateien = 1 Then
    26. p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    27. p.StartInfo.FileName = "C:\Program Files\PDFCreator\pdfcreator-cli.exe"
    28. p.StartInfo.Arguments = " PrintFile /File=" & stringEin & " /OutputFile=" & pfadFertig & pdfName & ".pdf"
    29. p.Start()
    30. Else
    31. p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    32. p.StartInfo.FileName = "C:\Program Files\PDFCreator\pdfcreator-cli.exe"
    33. p.StartInfo.Arguments = " MergeFiles /OutputFile=" & pfadFertig & pdfName & ".pdf" & stringEin
    34. p.Start()
    35. End If
    36. End Sub
    Hallo,

    ich benötige noch etwas Hilfe...
    Habe es jetzt stundenlang probiert, gegoogled, ...
    Ich bekomme es einfach nicht hin...

    Ich würde gerne mit dem PDF Creator aus Dateien PDFs per Skript erstellen - u.a. aus mehreren Dateien 1 PDF erstellen.
    Aus einer Datei 1 PDF erstellen habe ich hinbekommen (Zeile(59-62)).
    Mit dem Erstellen von 1 PDF aus mehreren Dateien habe ich Schwierigkeiten.

    In Zeile 68 muss ich folgenden String erzeugen:

    VB.NET-Quellcode

    1. " MergeFiles /OutputFile="C:\b\zusammen.pdf" "C:\a\Datei1.txt" "C:\a\Datei2.txt""

    Unter p.StartInfo.Arguments liegt aber vor:

    VB.NET-Quellcode

    1. " MergeFiles /OutputFile=C:\b\zusammen.pdf C:\a\Datei1.txt C:\a\Datei2.txt"


    Ich bekomme es einfach nicht hin in dem String Anführungszeichen darzustellen - in Zeile 61 habe ich es geschafft...

    Ich bitte um Hilfe...

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Imports System.IO
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim i As Integer = 0, k As Integer = 0, pdfName As String, ext(6) As String, ListeMerged As String, d As Integer = 0
    6. Dim Liste As New List(Of String), anzL As Integer = 0, AnzdateiOkay As Integer = 0, anzDateien As Integer = 0
    7. Dim pfadEinlesen As String = "C:\a\"
    8. Dim pfadFertig As String = "C:\b\"
    9. Dim ordnereinlesen As New DirectoryInfo(pfadEinlesen)
    10. 'Dim file As FileInfo
    11. Dim files = ordnereinlesen.GetFiles()
    12. Dim p As Process = New Process
    13. Dim dateiOkay As Boolean = False
    14. ext(0) = "pdf"
    15. ext(1) = "doc"
    16. ext(2) = "txt"
    17. ext(3) = "xls"
    18. ext(4) = "jpg"
    19. ext(5) = "jpeg"
    20. ext(6) = "tif"
    21. pdfName = InputBox("Wie soll das pdf heißen?")
    22. 'Drucker setzen
    23. SetDefaultPrinter("PDFCreator")
    24. 'Anzahl verwertbarer Dateien zählen, Liste erzeugen
    25. For Each file In files
    26. For k = 0 To 6
    27. If file.Extension.ToLower.Contains(ext(k)) Then
    28. Liste.Add(file.FullName.ToString())
    29. anzDateien += 1
    30. Exit For
    31. End If
    32. Next
    33. Next
    34. anzL = Liste.Count
    35. 'Fehler vorhanden?
    36. For d = 0 To anzL - 1
    37. dateiOkay = False
    38. For k = 0 To 6
    39. If Liste.ElementAt(d).Contains(ext(k)) Then
    40. 'datei okay
    41. dateiOkay = True
    42. Exit For
    43. End If
    44. Next
    45. If dateiOkay = True Then
    46. AnzdateiOkay += 1
    47. End If
    48. Next
    49. If AnzdateiOkay = anzL Then
    50. If anzL = 1 Then
    51. ListeMerged = Liste.ElementAt(0)
    52. p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    53. p.StartInfo.FileName = "C:\Program Files\PDFCreator\pdfcreator-cli.exe"
    54. p.StartInfo.Arguments = " PrintFile /File=""" & ListeMerged & """ /OutputFile=""" & pfadFertig & pdfName & ".pdf"""
    55. p.Start()
    56. End If
    57. If anzL > 1 Then
    58. ListeMerged = String.Join(" ", Liste)
    59. p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
    60. p.StartInfo.FileName = "C:\Program Files\PDFCreator\pdfcreator-cli.exe"
    61. p.StartInfo.Arguments = " MergeFiles /OutputFile=" & pfadFertig & pdfName & ".pdf" & " " & ListeMerged
    62. p.Start()
    63. End If
    64. Else
    65. MessageBox.Show("Mindestens 1 Datei kann nicht konvertiert werden.")
    66. Exit Sub
    67. End If
    68. 'alten Drucker setzen
    69. SetDefaultPrinter("Canon MX490 series Printer")
    70. End Sub
    71. <DllImport("winspool.drv", CharSet:=CharSet.Auto, SetLastError:=True)>
    72. Public Shared Function SetDefaultPrinter(Name As String) As Boolean
    73. End Function
    74. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kwon“ ()