Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Einfaches PDF-Batch gesucht

Frage Entwicklung Batch & Shell

Mitglied: Sprantaler

Sprantaler (Level 1) - Jetzt verbinden

10.03.2010 um 10:43 Uhr, 5725 Aufrufe, 26 Kommentare

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!
Mitglied: Bert001
10.03.2010 um 10:54 Uhr
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
Bitte warten ..
Mitglied: Sprantaler
10.03.2010 um 11:27 Uhr
Wäre ja aber trotzdem ziemlich umfangreich bei schätzungsweise 3000 Hauptnummern

Kleine Zwischenfrage: ist es normal, dass PDFTK sich gleich noch dem anklicken der .exe-Datei wieder schließt? Muss ichs wohl nochmal downloaden
Bitte warten ..
Mitglied: dave114
10.03.2010 um 11:41 Uhr
morgen,

ohne das Programm jetzt zu kennen würde ich spontan sagen das es eine Consolen-Anwendung ist.

dh. du musst das Programm über die CMD aufrufen.

Mit freundlichen Grüßen
David
Bitte warten ..
Mitglied: Sprantaler
10.03.2010 um 11:49 Uhr
tatata.....

Wenn ich die cmd starte und die .exe datei per drag+drop reinziehe, gehts ;)

Danke schonmal dafür. nun muss ich PDFTK nur noch sagen, was es tun soll. hat jemand eine idee?
Bitte warten ..
Mitglied: dave114
10.03.2010 um 11:54 Uhr
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!

Mit freundlichen Grüßen
David
Bitte warten ..
Mitglied: Sprantaler
10.03.2010 um 12:00 Uhr
Bin schon seit ca. zwei Stunden am "znouten" (Ist umweltfreundlicher als googlen: http://de.znout.org/ )

Und die Anleitung kenne ich schon, allerdings brauche ich ja eine Routine, die das alles automatisch löst, da ich sonst ein paar tage mit PDFs konvertieren verbringen kann

€:Bin auch parallel noch am znouten, komme aber wohl auf die Schnelle auf keinen grünen Zweig.
Bitte warten ..
Mitglied: dave114
10.03.2010 um 12:21 Uhr
Wenn du noch nen bisschen Geduld hast dann bastel ich noch nen bisschen weiter und vllt geht es ja so wie ist es mir vorstelle.
Bitte warten ..
Mitglied: noodyn
10.03.2010 um 12:24 Uhr
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.
Bitte warten ..
Mitglied: bastla
10.03.2010 um 12:49 Uhr
Hallo Sprantaler und willkommen im Forum!

Falls Du es eilig hast, könntest Du es mit folgendem Batch versuchen:
01.
@echo off & setlocal 
02.
set "Quelle=D:\QuellVerzeichnis" 
03.
set "Ziel=D:\ZielVerzeichnis" 
04.
set "pdftk=C:\Programme\pdftk-1.12\pdftk.exe" 
05.
 
06.
set "t1=%temp%\1.pdf" 
07.
set "t2=%temp%\2.pdf" 
08.
md "%Ziel%" 2>nul 
09.
pushd "%Quelle%" 
10.
for %%i in (*.pdf) do for /f "tokens=1-2 delims=_" %%a in ("%%~ni") do if "%%b"=="01" call :ProcessFile "%%i" %%a 
11.
popd 
12.
goto :eof 
13.
 
14.
:ProcessFile 
15.
copy %1 %t1% >nul 
16.
for /f "skip=1 delims=" %%i in ('dir /b /on "%2_*.pdf"') do ( 
17.
    if exist "%t1%" ( 
18.
        "%pdftk%" "%t1%" "%%~nxi" cat output "%t2%" 
19.
        del "%t1%" 
20.
    ) else ( 
21.
        "%pdftk%" "%t2%" "%%~nxi" cat output "%t1%" 
22.
        del "%t2%" 
23.
24.
25.
if exist "%t1%" move "%t1%" "%Ziel%\%2.pdf" 
26.
if exist "%t2%" move "%t2%" "%Ziel%\%2.pdf" 
27.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: miniversum
10.03.2010 um 12:55 Uhr
Versuch mal ob es ungefär so geht (kleinere Anpassungen könnten notwendig sein, weil ungetestet):
01.
@echo off 
02.
 
03.
set "filter=1234" 
04.
 
05.
set "sourcelist=" 
06.
FOR /F "delims=" %%i in ('dir /b "%filter%_*.pdf"') do call set "sourcelist=%%sourcelist%% %%%%i" 
07.
 
08.
pdftk %sourcelist% cat output "%filter%_gesamt.pdf"
Oh da war Bastla mal wieder schneller ...
Bitte warten ..
Mitglied: dave114
10.03.2010 um 13:04 Uhr
So ich habe mein Script jetzt auch fertig und es funktioniert soweit:

01.
set nummer=0 
02.
 
03.
:anfang 
04.
 
05.
md ordner 
06.
move %nummer%_*.pdf ordner 
07.
 
08.
cd C:\pdfs\ordner 
09.
 
10.
pdftk C:\pdfs\ordner\%nummer%_*.pdf cat output C:\pdfs\ordner\%nummer%.pdf 
11.
 
12.
copy %nummer%.pdf C:\pdfs\ 
13.
 
14.
cd.. 
15.
 
16.
rmdir C:\pdfs\ordner /s /q 
17.
 
18.
set /a nummer+=1 
19.
 
20.
pause 
21.
 
22.
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.

Mit freundlichen Grüßen
David
Bitte warten ..
Mitglied: Sprantaler
10.03.2010 um 13:56 Uhr
Ich verstehe die Befehle der Datei zwar nur ansatzweise, aber es funktioniert ! Danke an Bastla und die anderen, die sich dem Problem angenommen haben.

Werde mich mit dem Thema mal noch weiter befassen, schaut zwar anspruchsvoll aus, aber hat mein Interesse geweckt
Bitte warten ..
Mitglied: bastla
10.03.2010 um 14:05 Uhr
Hallo Sprantaler!

Freut mich, wenn's passt - und ansonsten: bei Fragen einfach fragen ...

Grüße
bastla
Bitte warten ..
Mitglied: dave114
10.03.2010 um 14:12 Uhr
@Sprantaler

Verrätst du uns noch welche Scripte du getestet hast, welche davon funktionieren und welches du jetzt einsetzt?

Mit freundlichen Grüßen
David
Bitte warten ..
Mitglied: Biber
10.03.2010 um 22:04 Uhr
[OT]
Moin Sprantaler,

willkommen im Forum.
Zwei Anmerkungen:
Zitat von Sprantaler:
Danke an Bastla und die anderen, die sich dem Problem angenommen haben.
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]
Bitte warten ..
Mitglied: FGHoyer
21.05.2013 um 10:48 Uhr
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
Bitte warten ..
Mitglied: bastla
21.05.2013 um 11:13 Uhr
Hallo FGHoyer!

Um den Ablauf besser nachvollziehen zu können, ändere Zeile 1 auf
@echo on & setlocal
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:
"C:\Batches und Scripte\PDF_kombinieren.cmd" > "D:\PDF-kombinieren_Log.txt"
- kannst Du die Ausgaben auch in eine Datei umleiten und dann in aller Ruhe analysieren (bzw relevante Zeilen posten) ...
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 10
for %%i in (*.pdf) do for /f "tokens=1-2 delims=_" %%a in ("%%~ni") do if "%%b"=="01" call :ProcessFile "%%i" %%a
könntest Du
for %%i in (*.pdf) do
entsprechend anpassen - also etwa
for %%i in (201304*.pdf) do
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
Bitte warten ..
Mitglied: FGHoyer
04.06.2013 um 12:20 Uhr
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
Bitte warten ..
Mitglied: bastla
04.06.2013 um 17:38 Uhr
Hallo FGHoyer!
Wie kann ich an die erzeugte PDF noch eine feste PDF anhängen in einem Aufwasch?
Dazu die Zeilen 25 und 26 ändern:
01.
if exist "%t1%" ( 
02.
    "%pdftk%" "%t1%" "D:\Feste.pdf" cat output "%2.pdf" 
03.
     move "%2.pdf" "%Ziel%\" 
04.
05.
if exist "%t2%" ( 
06.
    "%pdftk%" "%t2%" "D:\Feste.pdf" cat output "%2.pdf" 
07.
     move "%2.pdf" "%Ziel%\" 
08.
)
Grüße
bastla
Bitte warten ..
Mitglied: FGHoyer
18.06.2013 um 09:17 Uhr
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
Bitte warten ..
Mitglied: bastla
18.06.2013 um 11:14 Uhr
Hallo FGHoyer!
So als ob der Inhalt eines temporären Speichers noch nicht leer ist.
Durch Zeile 15 wird jeweils die Datei als "%temp%\1.pdf" neu erstellt und (siehe Zeile 17) auch zuerst verwendet - insofern sollte der Ablauf eigentlich passen ...

Grüße
bastla
Bitte warten ..
Mitglied: FGHoyer
19.06.2013 um 09:27 Uhr
Hallo Bastla,
stimmt und das passiert auch, aber anscheinend muß auch die 2.pdf in den Müll. Zumindest lässt der erste Test das vermuten, denn mit einer Zeile 16 mit copy %1 %t2% >nul scheint es zu klappen.... Danke
Bitte warten ..
Mitglied: FGHoyer
01.07.2013 um 08:50 Uhr
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
Bitte warten ..
Mitglied: bastla
01.07.2013 um 13:49 Uhr
Hallo FGHoyer!

Das Löschen könntest Du ganz am Ende des Unterprogramms per
del "%2_*.pdf"
erledigen ...

Grüße
bastla
Bitte warten ..
Mitglied: FGHoyer
02.07.2013 um 08:00 Uhr
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!!!
Bitte warten ..
Mitglied: bastla
02.07.2013 um 08:30 Uhr
Hallo FGHoyer!

Nicht nachvollziehbar und vor allem aufgrund des Codes nicht erklärbar - mit den Zeilen
01.
if exist "%t1%" move "%t1%" "%Ziel%\%2.pdf" 
02.
if exist "%t2%" move "%t2%" "%Ziel%\%2.pdf"
werden ja beide Temporärdateien nach dem Zusammenfügen entfernt. Du könntest das "move" noch durch Kopieren und Löschen ersetzen - das sähe dann so aus:
01.
copy "%t1%" "%Ziel%\%2.pdf" >nul 2>&1 
02.
copy "%t2%" "%Ziel%\%2.pdf" >nul 2>&1 
03.
del "%t1%" 2>nul 
04.
del "%t2%" 2>nul
Poste zur Sicherheit mal Dein aktuelles Script (als "Code" formatiert) ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Mehrere PDF-Dateien per Batch zusammenfügen (1)

Frage von Grimmli zum Thema Batch & Shell ...

Batch & Shell
gelöst 1 PDF duplizieren und umbenennen nach CSV mittels Batch (5)

Frage von Kalisser zum Thema Batch & Shell ...

Batch & Shell
Batch erweiterung gesucht (7)

Frage von Data61 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (22)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...