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

PDFs zusammenführen mit PDFtk und Befehl Suffix

Mitglied: Knolli

Knolli (Level 1) - Jetzt verbinden

25.09.2013, aktualisiert 15:42 Uhr, 3301 Aufrufe, 5 Kommentare, 2 Danke

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: https://www.administrator.de/forum/pdfs-per-batch-zusammenf%C3%BCgen-791 ...

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. :/
Mitglied: Endoro
25.09.2013 um 16:47 Uhr
Hi, der entsprechende Token ist der dritte, nicht der zweite; Delimiter sind Unterstrich und Punkt:
01.
for /f "tokens=3 delims=_." %%a in ('dir /b /a-d "%PDFCheck%_*.pdf"') do set "Suffix=%%a" 
Die Formatierung findest du hier.
lg.
Bitte warten ..
Mitglied: Knolli
26.09.2013, aktualisiert um 10:44 Uhr
Hallo,

ermal danke für deine schnelle Antwort!
Das mit der formatierung hab ich jetzt kapiert

Hab den Befehlt "for" bis jetzt leider noch nicht gekannt. Hab mir daher folgende Anleitung durchgelesen:
https://www.administrator.de/wissen/tutorial-zur-for-schleife-155681.htm ...
Brauche aber bitte trotzdem nochmal deine/eure Hilfe um das ganze umzusetzen.

Ich bin mir nicht sicher ob ich die Variable %%a und Suffix richtig gesetzt habe.
--> Zweile 27 - Vermutlich der Grund warum das Script nicht durch läuft?
Bzw. wie ich eine zweite Variable (%%b für "Suffix2"?) setze?
--> Wofür ist das von dir eingefügte /a-d ?
--> Zeile 20,30

Sry tu mir noch schwer!
Lg, Fabian


01.
@echo off & setlocal 
02.
 
03.
set "Base=\\Server1\UserData\Daten\Benutzer\Desktop\ABLAGE\Abrechnung_Kreuzmayr\TEST" 
04.
::Pfad an dem die Dateien abgelegt sind!
05.
set "PDFTK=C:\Program Files\PDFtk\pdftk.exe" 
06.
::Download von: http://www.pdfhacks.com/pdftk/ 
07.
 
08.
set "PDFCheck=*AutoAbr*" 
09.
set "PDFAlle=*_AutoAbrAllg_* *_AutoAbrEinzelKredit_* *_AutoAbrRabattkarten_*" 
10.
 
11.
set "PDFGes=Report" 
12.
 
13.
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i" 
14.
goto :eof 
15.
 
16.
:ProcessCust 
17.
pushd "%~f1"
18.
if not exist "%PDFCheck%_*.pdf" goto :EndSub 
19.
 
20.
for /f "tokens=3 delims=_." %%a in ('dir /b /a-d "%PDFCheck%_*.pdf"') do set "Suffix=%%a"
21.
:: /f "tokens=2* delims=_" %%a in ('dir /b "%PDFCheck%_*.pdf"') do set "Suffix=%%b" 
22.
 
23.
set PDFListe=
24.
for %%a in (%PDFAlle%) do call :ProcessFile "Abrechnung_Report" 
25.
:: for %%a in (%PDFAlle%) do call :ProcessFile "%%a_%Suffix%" 
26.
 
27.
"%PDFTK%" %PDFListe% cat output "ST%Suffix%_%PDFGes%_%Suffix2%" dont_ask 
28.
 
29.
::Loeschsimulation 
30.
for /f "delims=" %%i in ('dir /b "*_%Suffix%"^|findstr /v "ST%Suffix%_%PDFGes%_%Suffix2%"') do echo %%i 
31.
 
32.
:EndSub 
33.
popd 
34.
goto :eof 
35.
 
36.
:ProcessFile 
37.
if exist "%~1" set "PDFListe=%PDFListe% %~1"
Bitte warten ..
Mitglied: bastla
27.09.2013, aktualisiert um 15:30 Uhr
Hallo Knolli und ein (verspätetes) Willkommen im Forum!

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"
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 ...
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]
Bitte warten ..
Mitglied: Knolli
30.09.2013 um 09:33 Uhr
Hallo bastla

Erstmal danke für deine Hilfe! Durch das aktivieren von "echo on" habe ich gerade festgestellt, dass es bereits am PDFCheck scheitert.

C:\>if not exist "*AutoAbr*.pdf" goto :EndSub
C:\>popd
C:\>goto :eof

Kurioserweise sogar wenn ich ein Pdf in AutoAbr.PDF umbenenne und das dann angebe. --> Siehe überarbeitetes Script unten.
Muss ich hier noch einen Pfad angeben oder woran kann das liegen?
Batch liegt im Ordner (Synonym) KUNDE und PDFs im Ordner TEST (Habs aber auch getestet mit dem Batch im Ordner TEST).

Zitat von bastla:
Hallo Knolli und ein (verspätetes) Willkommen im Forum!
DANKE

Nicht klar ist mir, was Du mit Zeile 24 erreichen willst ...
Konnte zum ":ProcessFile" leider nichts finden und bin davon ausgegangen dass das nur die Bezeichnung des Prozesses unter Windows ist? :S

01.
@echo on & setlocal 
02.
 
03.
set "Base=D:\KUNDE\TEST" 
04.
::Pfad an dem die Dateien abgelegt sind!!!!!!!!!!
05.
set "PDFTK=C:\Program Files\PDFtk\bin\PdftkXp.exe" 
06.
::Download von: http://www.pdfhacks.com/pdftk/ 
07.
 
08.
set "PDFCheck=AutoAbr.PDF"
09.
::set "PDFCheck=*_AutoAbr*_*.PDF"
10.
set "PDFAlle=*_AutoAbrAllg_* *_AutoAbrEinzelKredit_* *_AutoAbrRabattkarten_*" 
11.
 
12.
set "PDFGes=Report" 
13.
 
14.
for /d %%i in ("%Base%\*.*") do call :ProcessCust "%%i" 
15.
:: goto :eof 
16.
 
17.
:ProcessCust 
18.
pushd "%~f1"
19.
if not exist "%PDFCheck%" goto :EndSub 
20.
 
21.
for /f "tokens=1,3 delims=_." %%a in ('dir /b /a-d "%PDFCheck%_*.pdf"') do set "Suffix=%%a" & set "Suffix2=%%b"
22.
:: for /f "tokens=3 delims=_." %%b in ('dir /b /a-d "ST*_%PDFCheck%_%%a.pdf"') do set "Suffix2=%%b"
23.
:: /f "tokens=2* delims=_" %%a in ('dir /b "%PDFCheck%_*.pdf"') do set "Suffix=%%b" 
24.
 
25.
set PDFListe=
26.
for %%a in (%PDFAlle%) do call :ProcessFile "Abrechnung_Report" 
27.
:: for %%a in (%PDFAlle%) do call :ProcessFile "%%a_%Suffix%" 
28.
 
29.
"%PDFTK%" %PDFListe% cat output "%Suffix%_%PDFGes%_%Suffix2%" dont_ask 
30.
 
31.
::Loeschsimulation 
32.
for /f "delims=" %%i in ('dir /b "*_%Suffix%"^|findstr /v "%Suffix%_%PDFGes%_%Suffix2%"') do echo %%i 
33.
 
34.
:EndSub 
35.
popd 
36.
goto :eof 
37.
 
38.
:ProcessFile 
39.
if exist "%~1" set "PDFListe=%PDFListe% %~1"
MfG, Knolli
Bitte warten ..
Mitglied: bastla
30.09.2013, aktualisiert um 22:24 Uhr
Hallo Knolli!
habe ich gerade festgestellt, dass es bereits am PDFCheck scheitert.
Abgesehen davon, dass die Zeile 15 nicht auskommentiert werden darf, müsste Zeile 3 eher
set "Base=D:\KUNDE"
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 "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
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

PDF-Stapelverarbeitung mit PDFTK (in batch, shell, powershell)

gelöst Frage von brause1701Batch & Shell3 Kommentare

Hallo Community, ich möchte beliebig viele PDF-Dateien mit pdftk verarbeiten und in ein Output-Verzeichnis ablegen (evtl. adaptierten Namen). Idealerweise ...

Batch & Shell

Automatische PDF Erstellung mit PDFTK aus Dateien mit gleichen Anfangsbezeichnung im Dateinamen

gelöst Frage von BirgitBBatch & Shell7 Kommentare

Ich verstehe nichts von Programmierung. Das nur schon mal vorab. Habe mich auch schon 2 Tage durch die Seiten ...

Batch & Shell

Automatische PDF Erstellung mit dem Programm PDFTK aus Dateien mit gleicher Anfangsbezeichnung im Dateinamen

gelöst Frage von BirgitBBatch & Shell12 Kommentare

Hallo, Eigentlich ist mir damals schon geholfen worden. Unter dem Link lösung Damals waren es immer 2 PDF-Dateien mit ...

Windows Server

Unbekanntes Verbindungsspezifisches DNS Suffix

Frage von tobitobsnWindows Server2 Kommentare

Hallo, ich habe vor kurzem eine seltsame Entdeckung gemacht. Bei einem Rechner eines Bekanntes ist ein unbekanntes verbindungsspezifisches DNS ...

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 3 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 7 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 Server
Dienstnamen und oder Deutsche und Englische Beschreibung in services.msc gleichzeitig anzeigen
gelöst Frage von vafk18Windows Server23 Kommentare

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

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 ...

JavaScript
Javascript: WebSql
gelöst Frage von internet2107JavaScript13 Kommentare

Guten Morgen zusammen, zunächst einmal einen schönen dritten Advent. Ich habe ein Problem mit Javascript und WebSQL. Bisher habe ...