Einfaches PDF-Batch gesucht
Ich suche zum Zusammenfügen von mehreren .pdf-Dateien eine Batchdatei
Die PDFs sind alle in diesem Format:
1234_01.pdf
1234_02.pdf
1234_03.pdf
1235_01.pdf
1235_02.pdf
1236_01.pdf
1237_01.pdf
1237_01.pdf
usw.
Die Dokumentennummer ist also nicht zwangsläufig fortlaufend, machmal gibts es auch einseitige Dokumente, allerdings haben auch die den zusatz _01 am Ende.
Ich hätte nun gerne, dass PDFTK alle PDFs mit der gleichen Hauptnummer zusammenfasst und unter derselben Nummer abspeichert. Eigentlich ganz simpel, aber ich steig beim batchen auf die schnelle nicht durch, müsste aber knapp 120.000 Dateien auf diese Weise zusammenfassen. Mit dem PDFTKBulider dauert das etwas lange....
Daher hoffe ich, dass mir ein erfahrener User vielleicht schnell was zaubern kann ;)
Vielen Dank im Vorraus!
Die PDFs sind alle in diesem Format:
1234_01.pdf
1234_02.pdf
1234_03.pdf
1235_01.pdf
1235_02.pdf
1236_01.pdf
1237_01.pdf
1237_01.pdf
usw.
Die Dokumentennummer ist also nicht zwangsläufig fortlaufend, machmal gibts es auch einseitige Dokumente, allerdings haben auch die den zusatz _01 am Ende.
Ich hätte nun gerne, dass PDFTK alle PDFs mit der gleichen Hauptnummer zusammenfasst und unter derselben Nummer abspeichert. Eigentlich ganz simpel, aber ich steig beim batchen auf die schnelle nicht durch, müsste aber knapp 120.000 Dateien auf diese Weise zusammenfassen. Mit dem PDFTKBulider dauert das etwas lange....
Daher hoffe ich, dass mir ein erfahrener User vielleicht schnell was zaubern kann ;)
Vielen Dank im Vorraus!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 137862
Url: https://administrator.de/contentid/137862
Ausgedruckt am: 20.11.2024 um 08:11 Uhr
26 Kommentare
Neuester Kommentar
Hallo,
Eventuell mittels einer kleinen Vorbereitung.
Du kannst die Dateien nach dem "Hauptnummernkriterium" in Unterverzeichnisse einsortieren (mittels cmd File)
Also
md C:\1234
copy *1234_*.pdf C:\1234
usw.
Danach solltest du einfach alle PDFs pro Verzeichnis zusammenfassen können.
Anderer Weg fällt mir momentan nicht ein.
LG
Eventuell mittels einer kleinen Vorbereitung.
Du kannst die Dateien nach dem "Hauptnummernkriterium" in Unterverzeichnisse einsortieren (mittels cmd File)
Also
md C:\1234
copy *1234_*.pdf C:\1234
usw.
Danach solltest du einfach alle PDFs pro Verzeichnis zusammenfassen können.
Anderer Weg fällt mir momentan nicht ein.
LG
morgen,
was hälst du von googlen?
Hier eine kleine Einführung.
Wenn du konkrete Probleme hast kannst du ja nochmal schreiben - aber google vorher!
mfg
David
was hälst du von googlen?
Hier eine kleine Einführung.
Wenn du konkrete Probleme hast kannst du ja nochmal schreiben - aber google vorher!
mfg
David
Du hast doch eine Antwort auf deine Frage bereits bekommen. Bau eine Schleife, sortiere die Dateien nach Namen in das Verzeichnis, lass pdftk alle pdfs in dem Verzeichnis zusammenfassen, steck die zusammengefasste Datei in einen anderen Ordner und lösche den aktuellen, dann fährst du mit der nächsten Nummer fort.
Hallo Sprantaler und willkommen im Forum!
Falls Du es eilig hast, könntest Du es mit folgendem Batch versuchen:
Grüße
bastla
Falls Du es eilig hast, könntest Du es mit folgendem Batch versuchen:
@echo off & setlocal
set "Quelle=D:\QuellVerzeichnis"
set "Ziel=D:\ZielVerzeichnis"
set "pdftk=C:\Programme\pdftk-1.12\pdftk.exe"
set "t1=%temp%\1.pdf"
set "t2=%temp%\2.pdf"
md "%Ziel%" 2>nul
pushd "%Quelle%"
for %%i in (*.pdf) do for /f "tokens=1-2 delims=_" %%a in ("%%~ni") do if "%%b"=="01" call :ProcessFile "%%i" %%a
popd
goto :eof
:ProcessFile
copy %1 %t1% >nul
for /f "skip=1 delims=" %%i in ('dir /b /on "%2_*.pdf"') do (
if exist "%t1%" (
"%pdftk%" "%t1%" "%%~nxi" cat output "%t2%"
del "%t1%"
) else (
"%pdftk%" "%t2%" "%%~nxi" cat output "%t1%"
del "%t2%"
)
)
if exist "%t1%" move "%t1%" "%Ziel%\%2.pdf"
if exist "%t2%" move "%t2%" "%Ziel%\%2.pdf"
goto :eof
bastla
Versuch mal ob es ungefär so geht (kleinere Anpassungen könnten notwendig sein, weil ungetestet):
Oh da war Bastla mal wieder schneller ...
@echo off
set "filter=1234"
set "sourcelist="
FOR /F "delims=" %%i in ('dir /b "%filter%_*.pdf"') do call set "sourcelist=%%sourcelist%% %%%%i"
pdftk %sourcelist% cat output "%filter%_gesamt.pdf"
Oh da war Bastla mal wieder schneller ...
So ich habe mein Script jetzt auch fertig und es funktioniert soweit:
nicht schön aber selten
edit: Ich geh hier davon aus das die ersten Dateien 0_*.pdf heißen. Dannach wird jedweils eins hochgezählt das heißt danach wären dann die Datei 2_*.pdf dran.
mfg
David
set nummer=0
:anfang
md ordner
move %nummer%_*.pdf ordner
cd C:\pdfs\ordner
pdftk C:\pdfs\ordner\%nummer%_*.pdf cat output C:\pdfs\ordner\%nummer%.pdf
copy %nummer%.pdf C:\pdfs\
cd..
rmdir C:\pdfs\ordner /s /q
set /a nummer+=1
pause
goto anfang
nicht schön aber selten
edit: Ich geh hier davon aus das die ersten Dateien 0_*.pdf heißen. Dannach wird jedweils eins hochgezählt das heißt danach wären dann die Datei 2_*.pdf dran.
mfg
David
@Sprantaler
Verrätst du uns noch welche Scripte du getestet hast, welche davon funktionieren und welches du jetzt einsetzt?
mfg
David
Verrätst du uns noch welche Scripte du getestet hast, welche davon funktionieren und welches du jetzt einsetzt?
mfg
David
[OT]
Moin Sprantaler,
willkommen im Forum.
Zwei Anmerkungen:
a) Bitte danke in diesem Zweigarm des Forums nicht denen, die sich "dem Problem angenommen haben", sondern denen, die sich "des Problems angenommen haben".
b) "Probleme" gibt es eigentlich nicht im Bereich "Batch & Shell", nur "Anforderungen". Hättest du gleich "Anforderungen" als Vokabel verwendet, dann wäre dir das mit dem Dativ gar nicht passiert (oder zumindest nicht zu lesen gewesen).
Grüße
Biber
[/OT]
Moin Sprantaler,
willkommen im Forum.
Zwei Anmerkungen:
a) Bitte danke in diesem Zweigarm des Forums nicht denen, die sich "dem Problem angenommen haben", sondern denen, die sich "des Problems angenommen haben".
b) "Probleme" gibt es eigentlich nicht im Bereich "Batch & Shell", nur "Anforderungen". Hättest du gleich "Anforderungen" als Vokabel verwendet, dann wäre dir das mit dem Dativ gar nicht passiert (oder zumindest nicht zu lesen gewesen).
Grüße
Biber
[/OT]
Hallo Bastla,
ich habe ein ähnliches Prob wie Sprantaler. Auch bei mir werden PDF-Dateien erzeugt, die dem Schema "Hauptnummer"_"LFDNR".pdf entsprechen. Wobei auch hier die LFDNR von 01 - XX hochgezählt wird oder auch mal nur als Einzeldatei erscheint.
Ich habe jetzt versucht Dein Script anzupassen und es läuft bei mir auch bis zum ersten Kopierbefehl, der 1. PDF in das temporäre Verzeichnis....und dann stirbt es. Und ich weiß nicht wieso, da auch meine Scriptkenntnisse in diesem Bereich zu wünschen übrig lassen. Eine nähere Erklärung wie dieses Script arbeitet wäre hilfreich.
Ich habe Dein Script genommen, weil Du anscheind keine festen Filter wie z.B. miniversum setzt. Oder kann ich bei den Filtern auch mit Platzhaltern, sprich Fragezeichen, arbeiten???
Greetz
ich habe ein ähnliches Prob wie Sprantaler. Auch bei mir werden PDF-Dateien erzeugt, die dem Schema "Hauptnummer"_"LFDNR".pdf entsprechen. Wobei auch hier die LFDNR von 01 - XX hochgezählt wird oder auch mal nur als Einzeldatei erscheint.
Ich habe jetzt versucht Dein Script anzupassen und es läuft bei mir auch bis zum ersten Kopierbefehl, der 1. PDF in das temporäre Verzeichnis....und dann stirbt es. Und ich weiß nicht wieso, da auch meine Scriptkenntnisse in diesem Bereich zu wünschen übrig lassen. Eine nähere Erklärung wie dieses Script arbeitet wäre hilfreich.
Ich habe Dein Script genommen, weil Du anscheind keine festen Filter wie z.B. miniversum setzt. Oder kann ich bei den Filtern auch mit Platzhaltern, sprich Fragezeichen, arbeiten???
Greetz
Hallo FGHoyer!
Um den Ablauf besser nachvollziehen zu können, ändere Zeile 1 auf
und starte den Batch aus einer CMD-Shell - es werden so alle Befehle vor ihrer Ausführung zunächst einmal angezeigt.
Wenn Du eine "Ausgabeumleitung" hinzufügst - unter der Annahme, dass der Batch als "C:\Batches und Scripte\PDF_kombinieren.cmd" gespeichert wäre, müsstest Du dann etwa so starten:
- kannst Du die Ausgaben auch in eine Datei umleiten und dann in aller Ruhe analysieren (bzw relevante Zeilen posten) ...
könntest Du
entsprechend anpassen - also etwa
verwenden.
Für die weitere Verarbeitung wird übrigens voausgesetzt, dass sich im Dateinamen vor dem "_" keine Leerzeichen und nach dem "_" zweistellige Laufnummern befinden - und nur, wenn es die Laufnummer "01" gibt, erfolgt eine Verarbeitung.
Grüße
bastla
Um den Ablauf besser nachvollziehen zu können, ändere Zeile 1 auf
@echo on & setlocal
Wenn Du eine "Ausgabeumleitung" hinzufügst - unter der Annahme, dass der Batch als "C:\Batches und Scripte\PDF_kombinieren.cmd" gespeichert wäre, müsstest Du dann etwa so starten:
"C:\Batches und Scripte\PDF_kombinieren.cmd" > "D:\PDF-kombinieren_Log.txt"
Ich habe Dein Script genommen, weil Du anscheind keine festen Filter wie z.B. miniversum setzt. Oder kann ich bei den Filtern auch mit Platzhaltern, sprich Fragezeichen, arbeiten???
In Zeile 10for %%i in (*.pdf) do for /f "tokens=1-2 delims=_" %%a in ("%%~ni") do if "%%b"=="01" call :ProcessFile "%%i" %%a
for %%i in (*.pdf) do
for %%i in (201304*.pdf) do
Für die weitere Verarbeitung wird übrigens voausgesetzt, dass sich im Dateinamen vor dem "_" keine Leerzeichen und nach dem "_" zweistellige Laufnummern befinden - und nur, wenn es die Laufnummer "01" gibt, erfolgt eine Verarbeitung.
Grüße
bastla
Hallo bastla, vielen Dank für Deine Antwort... ja, ja wer lesen kann ist klar im Vorteil. Ich hätte vielleicht alle Steuerzeichen direkt mitnehmen sollen, dann hätte es von Anfang an geklappt..Anyway, jetzt hat sich noch eine kleine Frage aufgetan. Wie kann ich an die erzeugte PDF noch eine feste PDF anhängen in einem Aufwasch??? Die feste PDF kann ich nennen wie ich will.
Greetz FGHoyer
Greetz FGHoyer
Hallo FGHoyer!
Grüße
bastla
Wie kann ich an die erzeugte PDF noch eine feste PDF anhängen in einem Aufwasch?
Dazu die Zeilen 25 und 26 ändern:if exist "%t1%" (
"%pdftk%" "%t1%" "D:\Feste.pdf" cat output "%2.pdf"
move "%2.pdf" "%Ziel%\"
)
if exist "%t2%" (
"%pdftk%" "%t2%" "D:\Feste.pdf" cat output "%2.pdf"
move "%2.pdf" "%Ziel%\"
)
bastla
Guten Morgen Bastla,
danke für Deine Hilfe. Die Batch läuft soweit ganz gut, aber...bei manchen erstellten PDF's stimmt der Inhalt nicht. Es wird der Inhalt der vorhergehenden PDF auf die neue Datei übertragen. So als ob der Inhalt eines temporären Speichers noch nicht leer ist. Leider, und das macht die Sache undurchsichtig, nicht immer. Mal alle 3 Dateien mal jede 2. Datei, auch mal jede...Absolut regellos, oder zumindest für mich nicht erkennbar. Log-file sagt auch nicht viel, außer das die Dateien erzeugt und in den Zielordner verschoben wurden..
Greetz FGHoyer
danke für Deine Hilfe. Die Batch läuft soweit ganz gut, aber...bei manchen erstellten PDF's stimmt der Inhalt nicht. Es wird der Inhalt der vorhergehenden PDF auf die neue Datei übertragen. So als ob der Inhalt eines temporären Speichers noch nicht leer ist. Leider, und das macht die Sache undurchsichtig, nicht immer. Mal alle 3 Dateien mal jede 2. Datei, auch mal jede...Absolut regellos, oder zumindest für mich nicht erkennbar. Log-file sagt auch nicht viel, außer das die Dateien erzeugt und in den Zielordner verschoben wurden..
Greetz FGHoyer
Hallo Bastla,
ich stehe vor einem Rätsel. Das Script läuft 1-2 Tage ohne Probleme um dann plötzlich nur noch Müll zu produzieren. Ich habe z.B. den Inhalt einer Datei unter 20 verschiedenen Dateinamen gefunden, so als ob es mit der Menge der Dateien ein Problem hat. Ich überlege jetzt, ob es nicht vielleicht sinnvoll wäre, nach jedem Durchlauf die zugehörigen Orginaldateien direkt zu löschen. Welche Zeilen müsste ich dafür einfügen???
Thx
FGHoyer
ich stehe vor einem Rätsel. Das Script läuft 1-2 Tage ohne Probleme um dann plötzlich nur noch Müll zu produzieren. Ich habe z.B. den Inhalt einer Datei unter 20 verschiedenen Dateinamen gefunden, so als ob es mit der Menge der Dateien ein Problem hat. Ich überlege jetzt, ob es nicht vielleicht sinnvoll wäre, nach jedem Durchlauf die zugehörigen Orginaldateien direkt zu löschen. Welche Zeilen müsste ich dafür einfügen???
Thx
FGHoyer
Guten Morgen! Ich werd noch bekloppt. Ich habe gestern immer wieder den Output meines/bastla's Scripts überprüft und alles sah super aus, so wie es eben sein sollte. Heute morgen komme ich an meinen Arbeitsplatz und stelle fest, dass es am letzten Lauf des gestrigen Tages in alle Dateien den Inhalt ein und der selben PDF geschrieben hat. Dieser Inhalt ist auch in den 2 temporären Zwischendateien 1.pdf und 2.pdf enthalten. Es sieht so aus als ob diese Zwischenspeicher irgendwann nicht mehr mit den aktuelle Dateiinhalten überschrieben werden und so alle Dateien den selben Inhalt haben. HAT IRGENDJEMAND EINE IDEE!!!
Hallo FGHoyer!
Nicht nachvollziehbar und vor allem aufgrund des Codes nicht erklärbar - mit den Zeilen
werden ja beide Temporärdateien nach dem Zusammenfügen entfernt. Du könntest das "
Poste zur Sicherheit mal Dein aktuelles Script (als "Code" formatiert) ...
Grüße
bastla
Nicht nachvollziehbar und vor allem aufgrund des Codes nicht erklärbar - mit den Zeilen
if exist "%t1%" move "%t1%" "%Ziel%\%2.pdf"
if exist "%t2%" move "%t2%" "%Ziel%\%2.pdf"
move
" noch durch Kopieren und Löschen ersetzen - das sähe dann so aus:copy "%t1%" "%Ziel%\%2.pdf" >nul 2>&1
copy "%t2%" "%Ziel%\%2.pdf" >nul 2>&1
del "%t1%" 2>nul
del "%t2%" 2>nul
Grüße
bastla