1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

txt Inhalt in batch variabel verwenden

Dieses Thema im Forum "Sonstige Sprachen" wurde erstellt von quan81, 4. Oktober 2017.

  1. quan81

    quan81 Grünschnabel

    Liebes Forum ich bin neu dabei und freu mich wenn mir jemand helfen kann.
    Ich versuche per .bat file aus einzelnen pdfs eine pdf zu erzeugen.
    Diese Variante funktioniert auch aber nur wenn im txt-file die einzelnen files hintereinander mit einem Leerzeichen aufgeführt werden.
    file1.pdf file2.pdf file3.pdf
    Code (PHP):
    1. @echo off
    2. set /p fn=Auftrag:
    3. SET /p list=<%fn%.txt
    4. C:\PDFtkServer\bin\pdftk.exe %list% cat output %fn%.pdf
    5.  
    6.  
    leider habe ich nur ein txt-file wo die einzelnen Files untereinander stehen.
    file1.pdf
    file2.pdf
    file3.pdf
    jetzt habe ich einiges gelesen, dass es mit einer Schleife möglich sein sollte.

    Kann mir hier jemand helfen? Bitte!
     
  2. HonniCilest

    HonniCilest Erfahrenes Mitglied

  3. quan81

    quan81 Grünschnabel

    Hallo HonniCilest, vielen dank dir! Es klappt fast perfekt!
    Habe diesen script im Einsatz was mich nur wundert ist das nur ca 90 Datensätze verarbeitet werden. Dann steigt das system aus oder lässt einfach welche weg.

    Code (PHP):
    1.  
    2. @echo off
    3. setlocal EnableDelayedExpansion
    4. set /p fn=Auftrag:
    5. if not exist "!fn!.txt" exit /b
    6. set "txt="
    7. set input=%fn%.txt
    8. for /f "delims=" %%a in (%input%) do (
    9.   set "txt=!txt!%%a "
    10. )
    11. set "txt=!txt:~0,-1!"
    12.  
    13. C:\PDFtkServer\bin\pdftk.exe !txt! cat output %fn%.pdf
    Hat jemand eine Idee? Vielen Dank euch!
     
  4. Biber3

    Biber3 Erfahrenes Mitglied

    Moin quan81,

    bitte verlinke deine Crosspostings.

    die ganze Zeile "C:\PDFtkServer\bin\pdftk.exe !txt! cat output %fn%.pdf" darf, wenn alle Variablen aufgelöst sind, nicht länger werden als - da gehen die Meinungen auseinander - 2000+x oder 8000+x Zeichen.
    Ebenso kann die Gesamtlänge eines Variablenwertes auch nur (s.o.) diese technisch bedingte maximale sein.
    Egal, ob du diese 2000/8000+x schon erreichst bei der Länge der Variablen !txt! oder beim Zusammenstöpseln zu einer CMD-Zeile: du läufst jedenfalls da auf'n Poller.

    Da du relativ lange Filenamen in deiner Text-Datei hast (kannst ja mal die Größe dieser *.txt-Datei anschauen), kommst du schnell an diese Grenze.

    Grüße
    Biber
     
  5. quan81

    quan81 Grünschnabel

    Hallo Biber3,
    danke dir für die Antwort. Ja es kommen bei mir einige Zeichnen durch den langen Pfad zusammen. Wie könnte man diese Problem lösen?
    Würde sowas gehen das man erst 50 Zeilen bearbeitet eine pdf1 erzeugt dann weiter 50 Zeilen bearbeitet und eine weiter pdf2 ....
    so max 200 Zeilen also vier mal. und zum Schluss aus pdf1 pdf2 pdf3 dpf4 die gesammt-pdf machen und löscht pdf1 pdf2 pdf3 dpf4?
    Oder denke ich zu kompliziert? :confused:
    Vielen Dank an alle
    hier behandele ich diese Thema zusätzlich!
     
  6. Biber3

    Biber3 Erfahrenes Mitglied

    Moin quan81,

    tja, wenn dein Ziel ist, am Ende des Tages aus meinetwegen 400 Einzeldateien einen einzigen Monsterdateiklumpen namens Gesamt.pdf zu erzeugen, dann wirst du wohl so eine handgestrickte Stückelungs-Strategie fahren müssen.
    Wobei es mir schwerfällt, jetzt nicht nachzufragen, wie sinnvoll denn wohl so ein Monsterklotz mit zig 1000 Seiten und ein paar Dutzend GByte sein mag.

    Gibt es denn da wirklich keine weitere logische Ebene bei deinen "zusammenzufassenden" Einzeldateien?
    Was ist denn die grosse "logische Klammer", derzufolge in deinem Beispiel 200 Dateien "zusammengehören"?

    (Ich sehe es weniger als handwerkliches Programmierproblem, ich würde eher die Strategie hinterfragen.)

    Grüße
    Biber
     
  7. quan81

    quan81 Grünschnabel

    Hallo Biber,
    dann erzähle ich etwas über mein Vorhaben. Wir müssen nach einem Auftrag diesen in die Fertigung geben. Dazu müssen wir alle Zeichnungen (das sind die einzelnen pdfs) ausdrucken und bekommen so einen Zeichnungssatz aller Zeichnungen für einen Auftrag. Da ich aus unserem ERP-System jede Zeichnung einzielt auf machen muss und drucken kann habe ich nach einer Lösung gesucht es zu automatisieren.
    Ich habe die Möglichkeit mit Crystel Report selber Berichte zu erzeugen und an unser ERP anzuknüpfen. Darum exportiere ich einen Bericht wo alle Zeichungspfade zusammengetragen werden (txt).
    und jetzt bastele ich daran diese zusammen zu bringen.
    Für viele Aufträge klappt es jetzt schon nur für die etwas größeren noch nicht.
    Es gibt pro Zeile eine pdf Zeichnung und ein Großauftrag hat max 200 Zeichnungen. Da diese alle vektorisiert sind sind die Dateien auch nicht all zu groß.
    z.B. eine Satz mit 91 Zeichnung ist 6,61 MB groß also noch weit von der GB weg ;) ich hoffe ich konnte es etwas erläutern.

    Siehst du eine Möglichkeit es in Zeilen aufzusplitten und dann zusammen zu führen?
    Ich wäre dir echt unendlich dankbar! :)

    Grüße quan81
     
  8. quan81

    quan81 Grünschnabel

    Noch ein Gedanke! Da der Hauptpfad immer der gleiche ist kann ich nur die Benennung des file verketten und dadurch wäre die comandozeile länge viel kürzer.
    Oder kommt es aufs gleiche raus?

    Vielen dank
     
  9. Biber3

    Biber3 Erfahrenes Mitglied

    Moin quan81,

    also, Situation ist doch, dass es jetzt klappt mit einer vorliegenden Inputdatei mit einem "festen" Namen "!fn!txt", d,h. wenn der Auftrag 4711 heisst, dann wird von deinem Batchfragment der Inhalt von 4711.txt (alle Files, die drinstehen) in eine Gesamt.pdf gewummt.

    Eigentlich musst du nur dafür sorgen, dass
    a) in der 4711.txt nur so viele Dateien stehen, wie auch nach menschlichem Ermessen in einem Rutsch verarbeitet werden können (meinetwegen 50 oder 75). Dann liegt nach der Verarbeitung eine 4711Gesamt.pdf vor.
    b) wenn nun außer der 4711.txt noch eine 4711#2.txt vorläge, in der die nächsten 50 oder 75 Dateien stünden, dann könnte derselbe Batch ohne große Anpassungen daraus eine 4711#2Gesamt.pdf erzeugen
    c) und am Ende könnten alle 4711*Gesamt.pdfs zusammengeklebt werden, auch wieder mit der pdftk.exe.

    Vorangehen müsste also ein Arbeitsschritt, der dien heutige 4711.txt in Scheibchen zu je 50-70 Zeilen zerlegt.
    Das sollte im Batch mit einer FOR/F-Anweisung und "skip 50" gehen oder mit "more +50"... da bist du nicht der erste, der so etwas machen will.

    Zumindest in dem anderen Forum, wo du auch gefragt hast, sollten ein paar Beispiele zu "Textdateien in Blöcke splitten" oder ähnlich zu finden sein.



    Grüße
    Biber
    [Edit] Der Gedanke "Pfad verkürzen" könnte das ganze Problem SEHR vereinfachen und diese "Automatisierung" für die paar Großaufträge/Sonderlocken überflüssig machen. Wenn nur zwei Fälle im Jahr übrig bleiben, die sich nicht mit der einfachen Standard-Mimik abfackeln lassen... na gut, dann löst man die von Hand.
    [/Edit]
     
  10. HonniCilest

    HonniCilest Erfahrenes Mitglied

    Noch ein ganz anderer Gedanke. Ich habs mal gegooglet und es sieht für mich so aus, als würde pdftk Wildcards erlauben. Also Weg mit der txt, alle pdf's die gemerged werden sollen in einen Ordner und es sollte gehen.

    Source: https://www.pdflabs.com/docs/pdftk-cli-examples/


    Die Wildcards wären an der Stelle nur ggf. ungünstig, wenn du die PDF's in einer bestimmten Reihenfolge brauchst. Aber hier könntet du dir ja ggf. mit namentlicher Nummerierung verhelfen.
     
    Zuletzt bearbeitet: 6. Oktober 2017
Die Seite wird geladen...