txt Inhalt in batch variabel verwenden


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
PHP:
@echo off
set /p fn=Auftrag:
SET /p list=<%fn%.txt
C:\PDFtkServer\bin\pdftk.exe %list% cat output %fn%.pdf

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!
 

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.

PHP:
@echo off
setlocal EnableDelayedExpansion
set /p fn=Auftrag:
if not exist "!fn!.txt" exit /b
set "txt="
set input=%fn%.txt
for /f "delims=" %%a in (%input%) do (
  set "txt=!txt!%%a "
)
set "txt=!txt:~0,-1!"

C:\PDFtkServer\bin\pdftk.exe !txt! cat output %fn%.pdf

Hat jemand eine Idee? Vielen Dank euch!
 

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
 

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!
 

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
 

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
 

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
 

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]
 

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.

Join in1.pdf and in2.pdf into a new PDF, out1.pdf

pdftk in1.pdf in2.pdf cat output out1.pdf

or (using handles):

pdftk A=in1.pdf B=in2.pdf cat A B output out1.pdf

or (using wildcards):

pdftk *.pdf cat output combined.pdf

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:

Neue Beiträge