Top-Themen

Aktuelle Themen (A bis Z)

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 PDFs per Batch zusammenfügen

Mitglied: 43964

43964 (Level 1)

25.01.2008, aktualisiert 17.10.2012, 22990 Aufrufe, 17 Kommentare

Hallo,

ich habe folgendes Szenario.
Unsere Kunden bekommen alle paar Tage Abrechnungen.
Diese Abrechnungen bestehen aus 4 PDF-Dateien.
Diese Dateien haben folgenden Aufbau:

1.) "Abrechnung_Rechnungen_KDNR_DATUM_LFDNR.PDF"
2.) "Abrechnung_Gesamt_ABCDE_KDNR_DATUM_LFDNR.PDF"
3.) "Abrechnung_Gesamt_FGHIJ_KDNR_DATUM_LFDNR.PDF"
4.) "Abrechnung_Buchungen_KDNR_DATUM_LFDNR.PDF"

KDNR: 4-Stellige (eindeutige) Kundennummer
DATUM: Erstellungsdatum. Format: 25012008
LFDNR: Laufende Abrechnungsnummer. Von 1 bis -theoretisch- unendlich.
ABCDE: Geschäftspartner 5stellig (möchte ich hier nicht nennen)
FGHIJ: Geschäftspartner 5stellig (möchte ich hier nicht nennen)

Diese Dokumente befinden sich in f:\outbox\aktuell\KDNR\ (also z.B. f:\outbox\aktuell\1234)
Jede Stunde werden diese Dokumente automatisch verschickt.
Der Ordner "aktuell" ist danach leer. Die Dokumente sind dann nach "f:\outbox\verarbeitet\DATUM\" verschoben.

Ziel ist es jetzt, diese 4 Dokumente per Batchbefehl (Also als stündlich geplanter Task) zu einem Dokument "Abrechnung_Gesamt_KDNR_DATUM_LFDNR.pdf" zusammenzufassen.

Die 4 Dokumente können dann anschließend gelöscht werden.

Adobe Professional 6.0 ist vorhanden.

Kann jemand mit einem Batch helfen?
Während der Testphase wäre es sinnvoll, wenn der Part des Löschens noch ausgeklammert wird.

Ich habe schon den Thread (https://www.administrator.de/forum/pdf-dateien-in-vielen-unterordnern-mi ...) gelesen, aber die Batch war für mich zu kompliziert, als dass ich diese einfach hätte umschreiben können.


Vielen Dank!
Mitglied: Dynadrate
25.01.2008 um 15:16 Uhr
Das lässt sich sogar kostenlos (=ohne Adobe) machen.
Ghostscript
Hier wird erklärt wie man mit Ghostscript merged (zusammenfügt): klick

Müsste man normalerweise alles per Batch erschlagen können.
Bitte warten ..
Mitglied: bastla
25.01.2008 um 16:07 Uhr
Hallo Schwimmbutz und Dynadrate!

Das lässt sich sogar kostenlos (=ohne Adobe) machen.
Auch, wie im oben zitierten Beispiel, mit pdftk.

... Batch war für mich zu kompliziert, als dass ich diese einfach hätte umschreiben können.
Ich hoffe, dass es mir gelungen ist :
01.
@echo off & setlocal
02.
 
03.
set "Base=f:\outbox\aktuell"
04.
set "PDFTK=C:\Tools\pdftk.exe"
05.
::Download von: http://www.pdfhacks.com/pdftk/
06.
 
07.
set "PDF1=Abrechnung_Rechnungen"
08.
set "PDF2=Abrechnung_Gesamt_?????"
09.
set "PDF3=Abrechnung_Buchungen"
10.
 
11.
set "PDFGes=Abrechnung_Gesamt"
12.
 
13.
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i"
14.
goto :eof
15.
 
16.
:ProcessCust
17.
pushd "%~f1"
18.
if not exist "%PDF1%_*.pdf" goto :EndSub
19.
 
20.
for /f "tokens=2* delims=_" %%a in ('dir /b "%PDF1%_*.pdf"') do set "Suffix=%%b"
21.
"%PDFTK%"  %PDF1%_%Suffix% %PDF2%_%Suffix% %PDF3%_%Suffix% cat output "%PDFGes%_%Suffix%" dont_ask
22.
 
23.
::Loeschsimulation
24.
echo Zu loeschen in %cd%:
25.
echo.
26.
for /f "delims=" %%i in ('dir /b "*_%Suffix%"^|findstr /v "%PDFGes%_%Suffix%"') do echo %%i
27.
echo =============================================
28.
echo.
29.
echo.
30.
 
31.
:EndSub
32.
popd
Für jeden KDNR-Ordner wird vorweg geprüft, ob eine "Abrechnung_Rechnungen_KDNR_DATUM_LFDNR.PDF" vorhanden ist. Wird eine solche Datei gefunden, kann daraus der Teil "KDNR_DATUM_LFDNR.PDF" (Suffix) entnommen werden, um die weiteren 3 .pdf-Dateien damit zu identifizieren (aus der Beschreibung geht nicht eindeutig hervor, dass sich nur die angeführten 4 Dateien im jeweiligen Ordner befinden).

Die Sammeldatei wird im übergeordneten Ordner ("f:\outbox\aktuell") erstellt. Ist bereits eine gleichnamige Sammeldatei vorhanden, wird diese (durch Verwendung der Option "dont_ask") überschrieben.

Das Löschen wird durch die Ausgabe einer Liste der zu löschenden Dateien simuliert.

Grüße
bastla

[Edit] Sammeldatei wird im selben Ordner erstellt, daher muss diese vom Löschen ausgenommen werden - Code entsprechend angepasst. [/Edit]
Bitte warten ..
Mitglied: 43964
25.01.2008 um 16:46 Uhr
HAllo.

Danke für die Lösung.
Ich bin noch nicht zu der Umsetzung gekommen, allerdings muss die fertige Datei im selben Ordner wie die 4 Dateien liegen (also z.B: im Ordner f:\outbox\aktuell\1234\). Sonst funktioniert das Versenden nicht.
Vielen Dank.
Bitte warten ..
Mitglied: bastla
25.01.2008 um 16:53 Uhr
Hallo Schwimmbutz!

allerdings muss die fertige Datei im selben Ordner wie die 4 Dateien liegen
Dazu musst Du nur den Verzeichniswechsel (mit "..\") aus der entsprechenden Zeile nehmen - ich ändere das gleich oben.

Grüße
bastla
Bitte warten ..
Mitglied: 43964
25.01.2008 um 17:07 Uhr
Hi,

also das zusammenfügen funktioniert. Wird auch in den richtigen Ordner gespeichert.
Problem ist jetzt aber noch, dass bei "Zu löschen" auch die Gesamt-Datei steht.

Evtl. kann auch die "neue" PDF-Datei in "Abrechnung_KDNR_DATUM_LFDNR.PDF" umbenannt werden. Falls es das einfacher macht?!

Aber ansonsten ein ABSOLUT PERFEKTER BATCH!
Bitte warten ..
Mitglied: bastla
25.01.2008 um 17:11 Uhr
Hallo Schwimmbutz!

Problem ist jetzt aber noch, dass bei "Zu löschen" auch die Gesamt-Datei steht.
Sollte sie nicht mehr (siehe angepasste Version) ...

Grüße
bastla
Bitte warten ..
Mitglied: 43964
25.01.2008 um 17:23 Uhr
OK.
Hat auch funktioniert.

Mir ist allerdings aufgefallen, dass es SEHR SELTEN, auch mal "Abrechnung_Zahlungen_KDNR_DATUM_LFDNR.pdf" sowie "Abrechnung_Umbuchungen_KDNR_DATUM_LFDNR.pdf" gibt.

Noch was:
Die Zeile "set "PDF2=Abrechnung_Gesamt_?????"" erfasst dann beide Dokumente (Also ABCDE und FGHIJ) ??

Dann müsstest du mir noch verraten, wie ich später die Löschsimulation entferne damit das Proggi dann lauffähig ist.

Dann wäre es perfekt
Vielen Dank.
Bitte warten ..
Mitglied: bastla
25.01.2008 um 17:40 Uhr
Hallo Schwimmbutz!

Ist mit "Abrechnung_Zahlungen_KDNR_DATUM_LFDNR.pdf" sowie "Abrechnung_Umbuchungen_KDNR_DATUM_LFDNR.pdf" jetzt die Liste der (uU) zu verarbeitenden Dateien komplett? Da "pdftk" nicht ganz entspannt auf nicht gefundene Dateien reagiert , muss ich noch eine Prüfung bzw eine Zusammenstellung der tatsächlich im jeweiligen Ordner vorhandenen Dateien einbauen.

Und nur zur Sicherheit: Die "Abrechnung_Rechnungen_KDNR_DATUM_LFDNR.PDF", aus welcher ich den variablen Teil (Suffix) hole, ist aber immer vorhanden?

Die Zeile "set "PDF2=Abrechnung_Gesamt_?????"" erfasst dann beide Dokumente (Also ABCDE und FGHIJ) ??
Das ist der Plan - es sei denn, ABCDE und FGHIJ wären konstant; dann würde ich sie exakt festlegen.

Dann müsstest du mir noch verraten, wie ich später die Löschsimulation entferne damit das Proggi dann lauffähig ist.
Relativ einfach - die mit "echo" beginnenden Zeilen kannst Du ersatzlos streichen, und in der "for"-Zeile musst Du nur das "echo" durch ein "del" ersetzen.

Grüße
bastla
Bitte warten ..
Mitglied: 43964
25.01.2008 um 17:44 Uhr
Hi bastla.

Die am Anfang beschriebenen 4 Dokumente sind IMMER vorhanden.
Es gibt halt manchmal diese beiden zusätzlichen. Aber eben leider nicht immer.

Den Teil mit dem Suffix kann ich auch bestätigen. IMMER konstant. (Also "Abrechnung_Rechnungen). Kd-Nr / Datum variiert (Von der Stellenzahl aber konstant). Lfd-Nr wie gesagt aufsteigend.

Ich weiß gar nicht, wie ich danken soll

Gruß,
Schwimmbutz
Bitte warten ..
Mitglied: bastla
25.01.2008 um 18:37 Uhr
Hallo Schwimmbutz!

Es sollten jetzt die beiden genannten zusätzlichen .pdf-Files ebenfalls in die Sammeldatei geschrieben werden. Wenn noch weitere Dateien (nur nach dem Muster "Abrechnung_Bezeichnung_KDNR_DATUM_LFDNR.pdf") hinzukommen, kannst Du diese einfach, durch Leerzeichen getrennt, in die Zeile "set PDFWeitere=..." aufnehmen.
01.
@echo off & setlocal
02.
 
03.
set "Base=f:\outbox\aktuell"
04.
set "PDFTK=C:\Tools\pdftk.exe"
05.
::Download von: http://www.pdfhacks.com/pdftk/
06.
 
07.
set "PDF1=Abrechnung_Rechnungen"
08.
set "PDF2=Abrechnung_Gesamt_?????"
09.
set "PDFWeitere=Abrechnung_Buchungen Abrechnung_Zahlungen Abrechnung_Umbuchungen"
10.
 
11.
set "PDFGes=Abrechnung_Gesamt"
12.
 
13.
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i"
14.
goto :eof
15.
 
16.
:ProcessCust
17.
pushd "%~f1"
18.
if not exist "%PDF1%_*.pdf" goto :EndSub
19.
 
20.
for /f "tokens=2* delims=_" %%a in ('dir /b "%PDF1%_*.pdf"') do set "Suffix=%%b"
21.
 
22.
set "PDFListe=%PDF1%_%Suffix%"
23.
for %%a in (%PDF2%_%Suffix%) do call :ProcessFile "%%a"
24.
for %%a in (%PDFWeitere%) do call :ProcessFile "%%a_%Suffix%"
25.
 
26.
"%PDFTK%" %PDFListe% cat output "%PDFGes%_%Suffix%" dont_ask
27.
 
28.
::Loeschsimulation
29.
for /f "delims=" %%i in ('dir /b "*_%Suffix%"^|findstr /v "%PDFGes%_%Suffix%"') do echo del "%%i"
30.
 
31.
:EndSub
32.
popd
33.
goto :eof
34.
 
35.
:ProcessFile
36.
if exist "%~1" set "PDFListe=%PDFListe% %~1"
Grüße
bastla
Bitte warten ..
Mitglied: 43964
28.01.2008 um 10:10 Uhr
Hallo bastla,

vielen Dank für die Lösung.
Ich habe eifrig getestet. Dabei sind mir doch noch Sachen aufgefallen:

Das Dokument: Abrechnung_Rechnungen ist nicht immer überall vorhanden.
Aber: Abrechnung_Buchungen ist überall vorhanden!

Ist es auch möglich, die Reihenfolge der Dokumente zu beeinflussen?
Ich habe etwas von set PDF=1... gelesen.

Und zwar:
Abrechnung_Gesamt_ABCDE = 1
Abrechnung_Gesamt_FGHIJ = 2
Abrechnung_Buchungen = Letzte

Diese 3 Dokumente sind IMMER vorhanden. Alle anderen dazwischen einsortieren. Ist das möglich?

Sorry, dass ich noch nicht fertig bin
Bitte warten ..
Mitglied: bastla
28.01.2008 um 13:46 Uhr
Hallo Schwimmbutz!

Sind eigentlich (wie bisher von mir angenommen) "ABCDE" und "FGHIJ" variabel? Falls nein, lässt sich natürlich die Reihenfolge entsprechend fixieren, falls doch, müsstest Du ein Kriterium für die Reihung angeben (= woran ist "ABCDE" zu erkennen?).
Abrechnung_Buchungen ... IMMER vorhanden
In der nächsten Version (erst, wenn obige Frage geklärt ist) werde ich dann das Auslesen des Suffix "KDNR_DATUM_LFDNR.PDF" auf Basis dieser Datei vornehmen.

Grüße
bastla
Bitte warten ..
Mitglied: 43964
28.01.2008 um 13:49 Uhr
Hi,

ABCDE ist immer fest belegt.
FGHIJ auch.

Hier werden 5stellige Firmennamen angegeben. Diese möchte ich allerdings hier im Netz nicht hinschreiben. Deshalb die Synonyme ABCDE bzw FGHIJ.
Bitte warten ..
Mitglied: bastla
28.01.2008 um 14:02 Uhr
Hallo Schwimmbutz!

Dann versuchen wir's mal so:
01.
@echo off & setlocal
02.
 
03.
set "Base=f:\outbox\aktuell"
04.
set "PDFTK=C:\Tools\pdftk.exe"
05.
::Download von: http://www.pdfhacks.com/pdftk/
06.
 
07.
set "PDFCheck=Abrechnung_Buchungen"
08.
set "PDFAlle=Abrechnung_Gesamt_ABCDE Abrechnung_Gesamt_FGHIJ Abrechnung_Rechnungen Abrechnung_Zahlungen Abrechnung_Umbuchungen Abrechnung_Buchungen"
09.
 
10.
set "PDFGes=Abrechnung_Gesamt"
11.
 
12.
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i"
13.
goto :eof
14.
 
15.
:ProcessCust
16.
pushd "%~f1"
17.
if not exist "%PDFCheck%_*.pdf" goto :EndSub
18.
 
19.
for /f "tokens=2* delims=_" %%a in ('dir /b "%PDFCheck%_*.pdf"') do set "Suffix=%%b"
20.
 
21.
set PDFListe=
22.
for %%a in (%PDFAlle%) do call :ProcessFile "%%a_%Suffix%"
23.
 
24.
"%PDFTK%" %PDFListe% cat output "%PDFGes%_%Suffix%" dont_ask
25.
 
26.
::Loeschsimulation
27.
for /f "delims=" %%i in ('dir /b "*_%Suffix%"^|findstr /v "%PDFGes%_%Suffix%"') do echo %%i
28.
 
29.
:EndSub
30.
popd
31.
goto :eof
32.
 
33.
:ProcessFile
34.
if exist "%~1" set "PDFListe=%PDFListe% %~1"
Die Reihenfolge der einzelnen Dateien kannst Du in der Zeile
01.
set "PDFAlle=..."
festlegen.

Grüße
bastla
Bitte warten ..
Mitglied: 43964
28.01.2008 um 14:36 Uhr
Super!

Das funktioniert 100%ig!

Was muss ich nun entfernen, um die Dateien wirklich zu löschen, und nicht nur zu simulieren?
Bitte warten ..
Mitglied: bastla
28.01.2008 um 15:18 Uhr
Hallo Schwimmbutz!

Die Zeile
01.
for /f "delims=" %%i in ('dir /b "*_%Suffix%"^|findstr /v "%PDFGes%_%Suffix%"') do echo %%i
ist zu ändern auf
01.
for /f "delims=" %%i in ('dir /b "*_%Suffix%"^|findstr /v "%PDFGes%_%Suffix%"') do del %%i
Grüße
bastla
Bitte warten ..
Mitglied: 43964
28.01.2008 um 15:22 Uhr
Hallo Bastla.

Super!! Ich danke dir ganz herzlich!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Mehrere PDF-Dateien per Batch zusammenfügen

gelöst Frage von GrimmliBatch & Shell1 Kommentar

Hallo zusammen, in einem Ordner liegen mehrere pdf Dateien. Die eine Hälfte der PDF's fängt mit „B_“ an gefolgt ...

Batch & Shell

Absoluter Batch-Anfänger benötigt Anleitungshilfe Anforderung Batch zum PDF zusammenfassen

Frage von VeritasbsgBatch & Shell1 Kommentar

Hi liebes Forum ich hoffe ihr könnte einem wirkliche Batch-Anfänger etwas helfen. Ich bin durch langes suchen auf diesen ...

Batch & Shell

Drucken von pdf über Batch per Taskplaner

gelöst Frage von SteveNowBatch & Shell9 Kommentare

Hallo zusammen, ich möchte dass jeden Tag eine Datei automatisiert gedruckt wird. Dazu habe ich folgendes batch geschrieben, welches ...

Batch & Shell

Zwei PDF-Dateien zusammen führen per Batch

gelöst Frage von hongziehongBatch & Shell3 Kommentare

Hallo zusammen, ich bin gerade dabei ein Batch zu schreiben, mit welchem ich zwei PDF-Dateien aus unterschiedlichen Ordnern zusammen ...

Neue Wissensbeiträge
Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 2 TagenHumor (lol)3 Kommentare

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 2 TagenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 6 TageniOS5 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 6 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
PCIe 1.0 Grafikkarte für 3840x2160
Frage von Windows10GegnerGrafikkarten & Monitore29 Kommentare

Hallo, mein Vater hat einen neuen Monitor gekauft, welcher eine native Auflösung von 3840*2160 hat. Diese muss jetzt auch ...

Windows 10
Windows Enterprise 1809 Eval nicht bootbar
Frage von Sunny89Windows 1022 Kommentare

Hallo zusammen, bevor ich mich jetzt noch stundenlang rumärger wollte ich euch fragen, ob Ihr die gleichen Probleme habt ...

Windows Server
Dienstnamen und oder Deutsche und Englische Beschreibung in services.msc gleichzeitig anzeigen
gelöst Frage von vafk18Windows Server21 Kommentare

Guten Morgen, die Suche nach Diensten in services.msc gestaltet sich immer wieder schwierig, weil mir je nach Aufgabe die ...

Linux
Info Monitor für eine Schule
gelöst Frage von CAT404Linux13 Kommentare

Moin, ich möchte einen Infomonitor betreiben; derzeit läuft da ein Windows 10 Rechner bei dem Firefox beim Start in ...