Denkanstoß gesucht.

  • Hallo Gemeinde,

    ich bin absoluter Neuling und erhoffe mir von euch einen Denkanstoß - aber keine Lösung. Bringt ja sonst alles nichts :D

    Ich möchte eine Batchdatei ausführen und einen Parameter an diese Batchdatei übergeben. Der Parameter soll in einem Popup eingegeben werden, dann in eine Variable gespeichert und die Batch übergeben werden.

    Ich freue mich auf Denkanstöße.

    Beste Grüße

    DGI

    • Offizieller Beitrag

    Ich möchte eine Batchdatei ausführen und einen Parameter an diese Batchdatei übergeben. Der Parameter soll in einem Popup eingegeben werden, dann in eine Variable gespeichert und die Batch übergeben werden.

    Ich freue mich auf Denkanstöße.

    1. $varInput = Inputbox(...) öffnet dir einen Dialog zum Eingeben von Werten

    2. Fehlerprüfung ob $varInput gültige Werte enthält

    3. wenn 2. JA: Aufruf Batch mit dem Parameter meine.bat & " " & $varInput (Befehl Run())

    In der Batch ist der Parameter über die %1 zu verwenden.

    ABER

    Viel besser wäre doch alles in AutoIt auszuführen.

  • Hey BugFix,

    vielen Dank für die Antwort.

    Zunächst habe ich das mal getestet und siehe da es klappt :)


    Relativ Simpel :

    Code
    #include <MsgBoxConstants.au3>
    
        $variable = InputBox("Test", "Variable eingeben")
        Run(".\mybat.bat" & " " & $variable)

    Die Batch macht zum Testen nichts anderes als die Variable auszugeben.

    Wenn ich mehrere Werte übergeben will geht es in der Batch mit %2 und %3 weiter usw.

    Soweit so gut. Erstmal was gelernt :)

    Ich könnte jetzt also meine existierende Batch über eine grafische Oberfläche ansteuern - Klasse :)

    Das kann man alles auch AutoIT ausführen.... klingt interessant.

    Ich beschreibe mal was ich ereichen will :

    PDF Merge mit Doc-Tools von PDF24

    1. Aus 3 Verzeichnissen die dort liegenden PDF Dateien einlesen (Pfad und Name) und jeweils in eine Variable speichern
    2. Aus den 3 Variablen den Befehl für die Doc-Tools.exe zusammenbauen und eine zusammengefügte PDF erzeugen
    3. Den vorher abgefragten Namen für die Ausgabe PDF nutzen um die PDF zu speichern
    4. Die Dateien aus den 3 Verzeichnissen löschen

    Die Batch sieht so aus :

    outputname wollte ich durch meine anfängliche Frage füllen.

    Freue mich auf Ideen :)

    Beste Grüße

    DGI

    • Offizieller Beitrag

    Aus 3 Verzeichnissen die dort liegenden PDF Dateien einlesen (Pfad und Name) und jeweils in eine Variable speichern
    Aus den 3 Variablen den Befehl für die Doc-Tools.exe zusammenbauen und eine zusammengefügte PDF erzeugen
    Den vorher abgefragten Namen für die Ausgabe PDF nutzen um die PDF zu speichern
    Die Dateien aus den 3 Verzeichnissen löschen

    Ist in jedem Ordner NUR EINE Datei

    oder

    DIESELBE ANZAHL DATEIEN, die dann in der vorhandenen Reihenfolge jeweils mit Join verknüpft werden sollen?

    (Batch ist nicht mein Spezialgebiet)

    • Offizieller Beitrag

    OK, probier mal (ungetestet):

    EDIT:

    War ein fehler beim FileDelete & Include ergänzt

    • Offizieller Beitrag

    _FileListToArray bietet auch die Rückgabe des kpl. Pfades an. Das vereinfacht das Skript dann etwas und Nutzung von Arrays macht es übersichtlicher (und bei großer Anzahl auch kürzer):

  • Das sieht mega aus. Spuckt nur ein Problem aus.

    Das joinen funktioniert nicht weil das Skript die PDFs löscht bevor die Verarbeitung abgeschlossen ist. Ohne das Löschen klappt es wunderbar.

    Ich habe eben noch irgendwas mit RunWait gefunden. Wäre das eine Lösung?

    EDIT : RunWait hat das Problem gelöst :)

    Beste Grüße

    DGI

  • Ich habs so gelöst (allerdings ohne AutoIt):

    Einmal editiert, zuletzt von GML (2. Juli 2021 um 11:36)

  • _FileListToArray bietet auch die Rückgabe des kpl. Pfades an. Das vereinfacht das Skript dann etwas und Nutzung von Arrays macht es übersichtlicher (und bei großer Anzahl auch kürzer):

    Hi, danke für die Antworten! :)

    Auf meinem Rechner läuft es, auf einem anderen gleiches System und gleicher Install bekomme ich eine Fehlermeldung:

    (10) : ==> Subscript used on non-accessible variable.:

    $aFileSource[$i] = $aTmp[1]

    $aFileSource[$i] = $aTmp^ ERROR

    Beste Grüße

    DGI

  • (10) : ==> Subscript used on non-accessible variable.:

    $aFileSource[$i] = $aTmp[1]

    $aFileSource[$i] = $aTmp^ ERROR

    Lass Dir nach der Zeile $aTmp = _FileListToArray($aPathSource[$i], '*.pdf', 1, True)

    mal @error ausgeben :

    Funktion _FileListToArray

    Fehler : Setzt das @error Flag auf ungleich null.

    1 - Pfad nicht gefunden oder ungültig

    2 - $sFilter ungültig

    3 - $iFlag ungültig

    4 - Keine Datei(en) gefunden

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Die Anforderungen haben sich jetzt komplett geändert.

    Das verwendete Tool - PDF24 - hat nicht das getan was es sollte. Also haben wir ein anderes Tool genommen und die Dateien dorthin übergeben. Auch einen weiteren Ordner konnte Abfragen und die Datei an entsprechender Stelle einbinden.

    Danke erst einmal bis hierhin!

    Auch wenn ich jetzt eventuell zuviel erfrage schildere ich euch mal die neuen Anforderungen :

    Es geht noch immer um das Zusammenstellen von PDF Dokumenten. Das Problem ist nicht welches Tool ich nehme sondern die Selektion der Dateien die zu verbinden sind.

    • Bei Start des Skripts soll ein Fenster aufgehen.
      • In diesem Fenster soll folgendes Platz finden :
        • Textbox zur Eingabe einer 6-Stelligen Nummer
          • Diese Nummer ist in jedem Dateinamen enthalten. Anhand dieser Nummer werden Dokumente selektiert
        • 4 Checkboxen
          • Jede Checkbox steht für eine der maximal 4 PDF Dokumente die selektiert werden. Jeder der 4 Teile hat immer einen bestimmten Ausdruck im Dateinamen.
            • Checkbox 1 --> Immer den Ausdruck 'eins' im Dateinamen
            • Checkbox 2 --> Immer den Ausdruck 'zwei' im Dateinamen
            • Checkbox 3 --> Immer den Ausdruck 'drei' im Dateinamen
            • Checkbox 4 --> Immer den Ausdruck 'vier' im Dateinamen
        • Textbox zur Eingabe eines Namen
          • Dies soll der Ausgabename der zusammengefügten Dateien werden.

    In Manchen Fällen wird nur ein Teil benötigt. In anderen Fällen werden immer unterschiedliche Teile, aber nicht immer alle benötigt.

    Egal welche der 4 Teile benötigt werden, es bleibt immer die gleiche Reihenfolge - Teil 1 - Teil 2 - Teil 3 - Teil 4 Auch wenn zwischendurch immer unterschiedliche Teile nicht mit zusammengefügt werden sollen.

    Teile 1 bis 3 liegen immer in einem Ordner der Struktur %userprofile%\path\to

    Teil 4 liegt immer einem bestimmten anderen Ordner

    Die Variante mit den Checkboxen, ist die für mich einzig logische Möglichkeit nur die Teile mit zusammenzufügen, die auch angewählt worden sind.

    Es sollen also immer die Dokumente zusammengefügt werden, die die 6-Stellige Nummer und den Ausdruck des Teils der Checkboxen im Namen haben.

    Diese sollen dann in der Reihenfolge Teil1 - 4 zusammengefügt und mit dem angegeben Dateinamen an einem bestimmten Ort abgelegt werden.


    Ich hoffe das war eingermaßen verständlich erklärt. Die Logik ist mir soweit klar einzig die Umsetzung bereitet mir Schwierigkeiten.

    Ich freue mich also weiterhin über jede Form der Hilfe, die Ihr mir zukommen lassen könnt.

    Nachfolgend noch die erste Variante, die ich als blutiger Anfänger nach den alten Anforderungen mit Hilfe eurer Hilfen zusammen gebastelt hatte.

    Beste Grüße DGI

  • Du musst also eine GUI erstellen und das dann dort umsetzen.

    Stichwort GUI. Ich habe anhand der Hilfe usw. eine GUI erstellt. Wie gesagt Neuling und so :) Ich habe das auch mal Kommentiert. Jetzt wäre der nächste Denkanstoß hilfreich :)

    Beste Grüße

    DGI

  • Habe inzwischen noch ein wenig weiter getestet und gelesen habe mittlerweile Funktionen hinter die beiden Buttons legen können. Wenn ich da auf dem Holzweg bin, könnt ihr mich gerne verbessern :)

    Habe das Ganze nochmal als Test mit Koda gemacht :

    Jetzt warte ich aber erstmal auf Antworten sonst wirds zu kuddelmuddelig...

    Beste Grüße

    DGI

    Einmal editiert, zuletzt von dgi (7. Juli 2021 um 10:17)

  • Ich greife das Thema nochmal auf.

    Ich habe wie fgolgt eine GUI erstellt:

    Ich habe in den Beiträgen oben schon einige Antworten erhalten, aber komme trotzdem Gedanklich nicht weiter.

    Ich habe das Problem das manchmal 2 Dateien zusammen gefasst werden müssen und manchmal 3 oder 4. Wie kann ich das abfangen?

    Außerdem gehe aufgrund der oben gezeigten Skripte davon aus, dass ich #include <File.au3> brauche, sobald ich das aber in mein Skript mit der GUI einfüge kommt direkt eine Fehlermeldung.

    Ich stehe also insgesammt etwas auf dem Schlauch. Ich hoffe nochmals auf Unterstützung.

    Beste Grüße

    DGI

  • Außerdem gehe aufgrund der oben gezeigten Skripte davon aus, dass ich #include <File.au3> brauche, sobald ich das aber in mein Skript mit der GUI einfüge kommt direkt eine Fehlermeldung.

    Das Einbinden der #include <File.au3> (immer gleich zu Anfang eines Skriptes) sollte eigentlich keine Probleme machen. Selbst wenn Du keine Funktionalität aus einer Inklude-Datei verwendest, hast Du schlimmstenfalls nur unnötigen Balast.

    Wie lautet denn die Fehlermeldung ?

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Also :

    Du deklariest eine Variable :

    Local $idclose = GUICtrlCreateButton("Abbrechen", 144, 184, 121, 33)

    $idclose wird aber bereits von "MsgBoxConstants.au3" als Const deklariert, siehe :

    Global Const $IDCLOSE = 8 ; Close button was selected

    Daher die Fehlermeldung : error: $idclose previously declared as a 'Const'.

    Du musst die Variable in deinem Code also umbenennen.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hallo!

    Ich finde dein Projekt interessant!

    Für mich würden sich aber einige Fragen noch ergeben um dieses umsetzen zu können.

    Woher kommen die PDF Dateien in den unterschiedlichen Ordnern?

    Sind in dem jeweiligen Ordner immer nur eine PDF Datei?

    Für wie viele Anwender soll dieses Programm Verwendung finden? (variable Pfade eventuell auslesen aus einer ini Datei --> Setup in der GUI oder einmal Einrichtung per manueller Befüllung der ini Datei )

    Sind die Projektnummern IMMER 6 stellig? (Dateien einlesen per regex = Benutzer freundlich)

    If not :?: then ?( else :thumbup: