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

Batch & Shell

Größere PDF Datei immer nach 3 Seiten trennen (pdftk)

gelöst Frage von IceAgeBatch & Shell6 Kommentare

Guten Morgen Liebe Kollegen, kleine Frage am Rande an diejenigen, die sich bereits mit pdftk auseinandergesetzt haben. Ich habe ...

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

Neue Wissensbeiträge
Ausbildung

Linux-Ausstieg in Niedersachsen - Windows statt Bugfix

Information von StefanKittel vor 2 TagenAusbildung35 Kommentare

Sind ja nur Steuergelder

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 4 TagenSpeicherkarten5 Kommentare

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 5 TagenSicherheit1 Kommentar

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 5 TagenHardware4 Kommentare

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Passwortwechsel Zeitpunkt festlegen
Frage von Looser27Windows Userverwaltung27 Kommentare

Guten Morgen liebe Kolleginnen und Kollegen, da es eine Userin in meinem Urlaub geschafft hat, sich vom AD vollständig ...

Windows Server
Probleme im AD am Außenstandort
gelöst Frage von emeriksWindows Server19 Kommentare

Hi, wir haben ein Problem mit AD und GPO am Außenstandort und ich stehe momentan mächtig auf dem Schlauch. ...

CMS
Seltsame Joomla-Meldung auf unserer WebSite
Frage von Winfried-HHCMS14 Kommentare

Hallo in die Runde! Kennt sich jemand mit Joomla aus? Im Backend unserer WebSite lesen wir seit einiger Zeit ...

Vmware
Sporadischer Ausfall physischer und virtueller Server (VMWare 5.5) im Netzwerk (anpingbar aber sonst ohne Funktion)
Frage von stoey20Vmware13 Kommentare

Hallo Gemeinde, seit ein paar Tagen haben wir in der Firma immer wieder das Problem, dass einige unserer VMWare ...