PDFs zusammenführen mit PDFtk und Befehl Suffix
Hallo zusammen,
vorab muss ich gestehen ich bin zwar IT-Techniker, auf diesem Gebiet jedoch ein ziemlicher Laie. (was sich hoffentlich bald ändern wird ;)
Was will ich erreichen?
Ich möchte 3 PDFs zu einem zusammenführen und 2 "Parameter" aus dem Titel des ursprünglichen PDF Files in den Titel des zusammengeführten übernehmen.
Ursprüngliche Files:
STx_AutoAbrAllg_20130923.PDF
STx_AutoAbrEinzelKredit_20130923.PDF
STx_AutoAbrRabattkarten_20130923.PDF
Als Dateiname sollten die 3 PDFs dann
"Stx_Report_jjjjmmtt.pdf" haben.
Sowohl x (Stationsnummer) als auch das Datum ändern sich laufend!
--> Zum Zusammenführen habe ich folgenden tollen Beitrag gefunden: PDFs per Batch zusammenfügen
Was ist mein Problem?
Wie Ihr im Script am Ende meines Beitrags seht habe ich es aus oben angeführtem Link und bereits soweit ich konnte für meine Bedürfnisse angepasst. Jedoch funktioniert das Ganze noch nicht so richtig. Vor allem weil ich nicht verstehe (auch nicht mit unsrem Freund Google) wie ich Festlege aus welchem Teil des Titels der/die/das Suffix herausgeholt wird.
Wäre sehr dankbar für eure Hilfe!
MfG, Fabian
Es folgt mein Script: (bzw. das von bastla)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@echo off & setlocal
set "Base=\\Server1\UserData\Daten\Benutzer\Desktop\ABLAGE\Abrechnung_Station\TEST"
::Pfad an dem die Dateien abgelegt sind.
set "PDFTK=C:\Program Files\PDFtk\pdftk.exe"
::Download von: http://www.pdfhacks.com/pdftk/
set "PDFCheck=*AutoAbr*"
set "PDFAlle=*_AutoAbrAllg_* *_AutoAbrEinzelKredit_* *_AutoAbrRabattkarten_*"
set "PDFGes=Report"
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i"
goto :eof
:ProcessCust
pushd "%~f1"
if not exist "%PDFCheck%_*.pdf" goto :EndSub
for /f "tokens=2* delims=_" %%a in ('dir /b "%PDFCheck%_*.pdf"') do set "Suffix=%%b"
set PDFListe=
for %%a in (%PDFAlle%) do call :ProcessFile "Abrechnung_Report"
:: for %%a in (%PDFAlle%) do call :ProcessFile "%%a_%Suffix%"
"%PDFTK%" %PDFListe% cat output "ST%Suffix%_%PDFGes%_%Suffix2%" dont_ask
::Loeschsimulation
for /f "delims=" %%i in ('dir /b "*_%Suffix%"^|findstr /v "ST%Suffix%_%PDFGes%_%Suffix2%"') do echo %%i
:: Um das Loeschen zu aktivieren echo durch del ersetzen.
:EndSub
popd
goto :eof
:ProcessFile
if exist "%~1" set "PDFListe=%PDFListe% %~1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Anmerkung: Hätte das ganze gerne als Code-Tag (mit Zeilenbezeichnung) gepostet weiß jedoch leider nicht wie. :/
vorab muss ich gestehen ich bin zwar IT-Techniker, auf diesem Gebiet jedoch ein ziemlicher Laie. (was sich hoffentlich bald ändern wird ;)
Was will ich erreichen?
Ich möchte 3 PDFs zu einem zusammenführen und 2 "Parameter" aus dem Titel des ursprünglichen PDF Files in den Titel des zusammengeführten übernehmen.
Ursprüngliche Files:
STx_AutoAbrAllg_20130923.PDF
STx_AutoAbrEinzelKredit_20130923.PDF
STx_AutoAbrRabattkarten_20130923.PDF
Als Dateiname sollten die 3 PDFs dann
"Stx_Report_jjjjmmtt.pdf" haben.
Sowohl x (Stationsnummer) als auch das Datum ändern sich laufend!
--> Zum Zusammenführen habe ich folgenden tollen Beitrag gefunden: PDFs per Batch zusammenfügen
Was ist mein Problem?
Wie Ihr im Script am Ende meines Beitrags seht habe ich es aus oben angeführtem Link und bereits soweit ich konnte für meine Bedürfnisse angepasst. Jedoch funktioniert das Ganze noch nicht so richtig. Vor allem weil ich nicht verstehe (auch nicht mit unsrem Freund Google) wie ich Festlege aus welchem Teil des Titels der/die/das Suffix herausgeholt wird.
Wäre sehr dankbar für eure Hilfe!
MfG, Fabian
Es folgt mein Script: (bzw. das von bastla)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@echo off & setlocal
set "Base=\\Server1\UserData\Daten\Benutzer\Desktop\ABLAGE\Abrechnung_Station\TEST"
::Pfad an dem die Dateien abgelegt sind.
set "PDFTK=C:\Program Files\PDFtk\pdftk.exe"
::Download von: http://www.pdfhacks.com/pdftk/
set "PDFCheck=*AutoAbr*"
set "PDFAlle=*_AutoAbrAllg_* *_AutoAbrEinzelKredit_* *_AutoAbrRabattkarten_*"
set "PDFGes=Report"
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i"
goto :eof
:ProcessCust
pushd "%~f1"
if not exist "%PDFCheck%_*.pdf" goto :EndSub
for /f "tokens=2* delims=_" %%a in ('dir /b "%PDFCheck%_*.pdf"') do set "Suffix=%%b"
set PDFListe=
for %%a in (%PDFAlle%) do call :ProcessFile "Abrechnung_Report"
:: for %%a in (%PDFAlle%) do call :ProcessFile "%%a_%Suffix%"
"%PDFTK%" %PDFListe% cat output "ST%Suffix%_%PDFGes%_%Suffix2%" dont_ask
::Loeschsimulation
for /f "delims=" %%i in ('dir /b "*_%Suffix%"^|findstr /v "ST%Suffix%_%PDFGes%_%Suffix2%"') do echo %%i
:: Um das Loeschen zu aktivieren echo durch del ersetzen.
:EndSub
popd
goto :eof
:ProcessFile
if exist "%~1" set "PDFListe=%PDFListe% %~1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Anmerkung: Hätte das ganze gerne als Code-Tag (mit Zeilenbezeichnung) gepostet weiß jedoch leider nicht wie. :/
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 217840
Url: https://administrator.de/contentid/217840
Ausgedruckt am: 25.11.2024 um 19:11 Uhr
5 Kommentare
Neuester Kommentar
Hi, der entsprechende Token ist der dritte, nicht der zweite; Delimiter sind Unterstrich und Punkt:
Die Formatierung findest du hier.
lg.
for /f "tokens=3 delims=_." %%a in ('dir /b /a-d "%PDFCheck%_*.pdf"') do set "Suffix=%%a"
lg.
Hallo Knolli und ein (verspätetes) Willkommen im Forum!
Für "%Suffix2%" kannst Du die Zeile 20 ergäzen (ungetestet):
Zu beachten wäre noch, dass "ST" bereits in "%Suffix%" enthalten ist und daher nicht in der Zeile 27 hinzugefügt werden muss.
Nicht klar ist mir, was Du mit Zeile 24 erreichen willst ...
Grüße
bastla
[Edit] "%Suffix2%"-Ermittlung korrigiert [/Edit]
Für "%Suffix2%" kannst Du die Zeile 20 ergäzen (ungetestet):
for /f "tokens=1,3 delims=_." %%a in ('dir /b /a-d "%PDFCheck%_*.pdf"') do set "Suffix=%%a" & set "Suffix2=%%b"
Nicht klar ist mir, was Du mit Zeile 24 erreichen willst ...
Wofür ist das von dir eingefügte /a-d ?
Sicherheitsmaßnahme - damit liefert der "dir
"-Befehl nur Dateien, keine Ordner.Grüße
bastla
[Edit] "%Suffix2%"-Ermittlung korrigiert [/Edit]
Hallo Knolli!
lauten, da in der Schleife (Zeile 14) alle Unterordner (= Kundenordner) des "%Base%"-Pfades abgearbeitet werden; wenn es daher unter "D:\KUNDE\TEST" keine Ordner mehr gibt, wird das Unterprogramm ":ProcessCust" nie (aus der Schleife heraus) erreicht, sondern (wegen des fehlenden "
"
Grüße
bastla
habe ich gerade festgestellt, dass es bereits am PDFCheck scheitert.
Abgesehen davon, dass die Zeile 15 nicht auskommentiert werden darf, müsste Zeile 3 eherset "Base=D:\KUNDE"
goto :eof
") nur direkt im Ablauf, wobei dann in "%1" aber kein Pfad enthalten ist.Konnte zum ":ProcessFile" leider nichts finden und bin davon ausgegangen dass das nur die Bezeichnung des Prozesses unter Windows ist? :S
":ProcessFile" ist die Sprungmarke am Beginn des Unterprogrammes, in dem alle Dokumentarten aus "%PDFAlle%" in die Reihe der zu verarbeitenden Dokumente einzuordnen sind - insofern braucht es zumindest "%%a" im Aufrufparameter."
echo on
" war übrigens genau der richtige Ansatz - so kannst Du nicht nur den Ablauf nachvollziehen, sondern auch, zu welchen Werten die Variablen (wie etwa "%%i" oder "%Suffix%") aufgelöst werden ...Grüße
bastla