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

PDFs zusammenführen mit PDFtk und Befehl Suffix

Frage Entwicklung Batch & Shell

Mitglied: Knolli

Knolli (Level 1) - Jetzt verbinden

25.09.2013, aktualisiert 15:42 Uhr, 2972 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: http://www.administrator.de/frage/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!
Mit freundlichen Grüßen, 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:
http://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"
Mit freundlichen Grüßen, 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 ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...