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

PDF-Dateien in vielen Unterordnern mit PDFTK zusammenfügen und umbenennen

Frage Entwicklung Batch & Shell

Mitglied: AlterSchuljunge

AlterSchuljunge (Level 1) - Jetzt verbinden

12.09.2007, aktualisiert 13.09.2007, 9276 Aufrufe, 9 Kommentare

Dokumenten/Schaltplan-Archivierung über Kopier/Scaneinheit legt automatisch PDF-Dateien an. Diese werden dann auf einen FTP-Server (derzeit ein Laptop) geladen und von Hand in entsprechende Ordner abgelegt. Dabei wird jede einzelne Seite als einzelne PDF-Datei gespeichert.

Hallo erstmal,

ich habe folgendes Problem:
PDF-Dateien liegen in vielen verschiedenen Unterverzeichnissen und sollen zusammengefügt werden, aber immer nur in der untersten Verzeichnisebene. Das sieht derzeit so aus:

FTP-ROOT -----> Hier werden die Daten vom Kopierer abgelegt und händisch in die Unterordner einsortiert
1983 -----> Maschinenbaujahr (von 1980-1998 evtl. kommen andere dazu, der Ordner "Andere" zählt separat)
5958 - Lenzen -----> Die Kom.-Nr. der Maschine und der Kundenname evtl. weitere Daten wie Maschinentyp durch Leerzeichen und "-" getrennt
124584252_1.pdf -----> Die Dateien im Ordner mit der Maschinen-Nr. - Die lange Nr. ist die Scan-Job-Nr. und bleibt je Ordner gleich, die einzelnen Seiten werden alle fortlaufend nummeriert mit "_Nr."
124584252_2.pdf
124584252_3.pdf

Habe leider kaum/keine Erfahrung mit Find, FindStr und For welche ich den anderen Batch-Dateien nach benutzen sollte.
Da die ganze Archivierungsgeschichte seit gestern angelaufen ist und ich noch einen Berg anderer Arbeiten habe kann ich mich leider zeitlich nicht ausführlich mit dem Thema beschäftigen und einarbeiten, und benötige innerhalb der nächsten 1-2Wochen eine brauchbare Lösung.


Hier noch ein Bild wie die derzeitige Ordnerstruktur ist:
64d837097feb5aa08ea21bf909a3d720-ordner - Klicke auf das Bild, um es zu vergrößern


Zusammensetzen der Dateien mit PDFTK sollte sich folgendermaßen ergeben, damit der Ordnername auf die Datei übertragen wird: PDFTK 124584252_1.pdf 124584252_2.pdf 124584252_3.pdf CAT "5958 - Lenzen.pdf"



Ich wäre über jeden praxisnahen Vorschlag und vor allen Dingen Beispielen dankbar.

freundliche Grüße

AlterSchuljunge
Mitglied: bastla
13.09.2007 um 01:42 Uhr
Hallo AlterSchuljunge und willkommen im Forum!

Der folgende Entwurf einer Batch-Lösung geht davon aus, dass sich die Reihenfolge der einzelnen .pdf-Dateien anhand des Dateidatums bestimmen lässt (da eine Sortierung nach Dateinamen durch die unterschiedliche Länge der angefügten Nummer dazu führen würde, dass nach "124584252_1.pdf" als nächstes "124584252_10.pdf", "124584252_11.pdf", ..., "124584252_19.pdf" und dann erst "124584252_2.pdf" verwendet würden).
01.
@echo off & setlocal 
02.
set "root=D:\FTP-ROOT" 
03.
set Von=1983 
04.
set Bis=1983 
05.
 
06.
for /l %%j in (%Von%,1,%Bis%) do ( 
07.
	for /d %%v in ("%root%\%%j\*.*") do call :ProcessClient "%%v" 
08.
09.
goto :eof 
10.
 
11.
:ProcessClient 
12.
set "PDFFile=%~1\%~n1.pdf" 
13.
if exist "%PDFFile%" del "%PDFFile%" 
14.
set "Temp1=%~1\Temp1.tmp" 
15.
set "Temp2=%~1\Temp2.tmp" 
16.
set First=True 
17.
for /f "delims=" %%d in ('dir %1 /b /od') do if not defined First ( 
18.
	pdftk "%Temp1%" "%~1\%%d" cat output "%Temp2%" 
19.
	move "%Temp2%" "%Temp1%" 
20.
) else (	 
21.
	copy "%~1\%%d" "%Temp1%">nul 
22.
	set First= 
23.
24.
move "%Temp1%" "%PDFFile%" 
25.
goto :eof
Der Pfad in Zeile 2 ist natürlich an Deine Gegebenheiten anzupassen, und zum Testen habe ich nur das Jahr 1983 (Von = Bis) vorgeben - wenn der Batch wunschgemäß funktionieren sollte, einfach die beiden Jahreszahlen anpassen.

Kurz zum Ablauf:
Mit den ersten beiden "for"-Schleifen werden die einzelnen Jahre und innerhalb jeden Jahres die einzelnen Kundenverzeichnisse durchlaufen und zur Bearbeitung der vollständige Verzeichnispfad an das entsprechende Unterprogramm (":ProcessClient") weitergegeben.

In diesem Unterprogramm wird vorweg eine bereits existierende Sammeldatei gelöscht. (Alternativ könnte auch auf die Bearbeitung des Verzeichnisses verzichtet werden, wenn die Sammeldatei bereits vorhanden ist.)

Danach wird die erste (= älteste) .pdf-Datei des Verzeichnisses als Ausgangsdatei in eine temporäre Datei ("Temp1.tmp") kopiert.

Ab der zweiten Datei wird jeweils die Temporärdatei mit der aktuell zu bearbeitenden Datei verkettet und in eine zweite Temp-Datei ("Temp2.tmp") geschrieben (da - zumindest in der von mir zum Testen verwendeten Version 1.12 - PDFTK gleichnamige Quell- und Zieldateien nicht akzeptiert).

Durch Umbenennen der (verketteten) "Temp2.tmp" wieder auf "Temp1.tmp" kann dieser Vorgang für jede einzelne .pdf-Datei wiederholt werden, bis schließlich (durch Umbenennen der letzten Temp-Datei) die endgültige, nach dem Verzeichnisnamen benannte, Sammeldatei entsteht.

Grüße
bastla

P.S.: Nur zur Sicherheit: Es sollten zwar alle Originaldateien erhalten bleiben, dennoch empfiehlt es sich, zum Testen mit Kopien zu arbeiten ...
Bitte warten ..
Mitglied: AlterSchuljunge
13.09.2007 um 08:15 Uhr
Habe es mal für 1983 getestet und später für alle anderen Dateien auch (natürlich mit Backup!).
Es hat auf Anhieb alles gleich perfekt funktioniert!

Vielen Dank an Dich BASTLA !!!
Du hast mir jede Menge Zeit/Arbeit und dementsprechend auch Ärger erspart!

Gruß

AlterSchuljunge
Bitte warten ..
Mitglied: Sternex
21.09.2010 um 10:54 Uhr
Hallo,

ich habe eig genau das gleiche Problem wie oben beschrieben.
Jedoch funktioniert dieser Batch bei mir so nicht.

Ich möchte alle im Ordner Root befindlichen Unterordner einbeziehen (nicht wie hier die angegebenen Jahreszahlen).
In diesen Unterordnern befinden sich rund 20 PDFs, welche nach Dateiname sortiert zusammengefügt werden sollen. (01.pdf, 02.pdf, 03.pdf usw...)

Mit dem "Umarbeiten" habe ich aber gerade so meine Probleme.
Vielen Dank schonmal für die Hilfe ;)
Bitte warten ..
Mitglied: bastla
21.09.2010 um 11:45 Uhr
Hallo Sternex!

Versuch es mal (nach dem Anpassen der Zeile 2 und dem Entfernen der für Dich überflüssigen Zeilen 3 und 4) mit folgendem Ersatz der Zeilen 6 bis 8:
for /d %%v in ("%root%\*.*") do call :ProcessClient "%%v"
Um die Sortierung nach Dateinamen durchzuführen, wäre in Zeile 17 anstelle von
... dir %1 /b /od ...
die Schreibweise
... dir %1 /b /on ...
zu verwenden.

Grüße
bastla
Bitte warten ..
Mitglied: Sternex
21.09.2010 um 13:18 Uhr
Vielen Dank bastla!
Ein Problem noch. In dem Root Verz. befinden sich ja alle Unterordner.
Wenn ich den Root Pfad angebe verarbeitet er nix sondern legt in dem Pfad eine PDF Datei ohne Inhalt an.
Also irgendwie geht er nicht in die Ordner.

Ach und nochetwas. Kann man irgendwie die Fertigen PDFs dann eine Ebene höher legen?
Also in das Root Verz. und nicht in dem Unterordner belassen?

Und das man sieht was er gerade bearbeitet wäre auch toll. müsste ja irgendwo einfach nur ein echo rein oder?

Vielen Dank!
Bitte warten ..
Mitglied: bastla
21.09.2010 um 17:33 Uhr
Hallo Sternex!

Sorry - hatte vorhin nur kurz drübergeschaut ...

Zwar immer noch ungetestet, aber hoffentlich trotzdem mit einem passenden Ergebnis, könnte das so gehen:
01.
@echo off & setlocal 
02.
set "root=D:\FTP-ROOT" 
03.
 
04.
for /d %%v in ("%root%\*.*") do call :ProcessClient "%%v" 
05.
goto :eof 
06.
 
07.
:ProcessClient 
08.
set "PDFFile=%root%\%~n1.pdf" 
09.
if exist "%PDFFile%" del "%PDFFile%" 
10.
 
11.
set "Temp1=%temp%\Temp1.tmp" 
12.
set "Temp2=%temp%\Temp2.tmp" 
13.
 
14.
pushd %1 
15.
set First=True 
16.
for /f "delims=" %%d in ('dir /b /on *.pdf') do if not defined First ( 
17.
    echo Bearbeite "%~1\%%d" 
18.
    pdftk "%Temp1%" "%%d" cat output "%Temp2%" 
19.
    move "%Temp2%" "%Temp1%" 
20.
) else ( 
21.
    echo Bearbeite "%~1\%%d" 
22.
    copy "%%d" "%Temp1%">nul 
23.
    set First= 
24.
25.
move "%Temp1%" "%PDFFile%">nul && echo "%~n1.pdf" erstellt & echo\ 
26.
popd 
27.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Sternex
22.09.2010 um 14:17 Uhr
Hallo bastla,
also das er es eine Ebene höher legt und das man sieht was passiert klappen Super!

Das er jedoch den Root Pfad annimmt geht immernoch nicht.

Also mein Aufbau nochmal:
  1. Root
    • Ordner1
      • Unterordner von Ordner1
        1. PDF
        2. PDF....
    • Ordner2
      • Unterordner von Ordner2
        1. PDF
        2. PDF....

    Außerdem muss ich noch (set "pdftk-bin=C:\Programme\pdftk.exe") setzen, da er sonst nur eine PDF statt aller nimmt.
    Und kann man den Vorgang noch beschleunigen? Da er mit den 2 tmp Files arbeitet ist es verdammt langsam.

    Dank für die Hilfe!
Bitte warten ..
Mitglied: bastla
22.09.2010 um 16:28 Uhr
Hallo Sternex!

Auf diese Struktur wäre ich anhand von
In dem Root Verz. befinden sich ja alle Unterordner.
bzw
Kann man irgendwie die Fertigen PDFs dann eine Ebene höher legen?
Also in das Root Verz. und nicht in dem Unterordner belassen?
nicht gekommen ...

Neuer Versuch:
01.
@echo off & setlocal 
02.
set "root=D:\FTP-ROOT" 
03.
 
04.
for /d %%v in ("%root%\*.*") do for /d %%u in ("%%v\*.*") do call :ProcessClient "%%u" "%%v" 
05.
goto :eof 
06.
 
07.
:ProcessClient 
08.
set "PDFFile=%root%\%~n1.pdf" 
09.
if exist "%PDFFile%" del "%PDFFile%" 
10.
 
11.
set "Temp1=%temp%\Temp1.tmp" 
12.
set "Temp2=%temp%\Temp2.tmp" 
13.
 
14.
pushd %1 
15.
set First=True 
16.
for /f "delims=" %%d in ('dir /b /on *.pdf') do if not defined First ( 
17.
    echo Bearbeite "%~1\%%d" 
18.
    pdftk "%Temp1%" "%%d" cat output "%Temp2%" 
19.
    move "%Temp2%" "%Temp1%" 
20.
) else ( 
21.
    echo Bearbeite "%~1\%%d" 
22.
    copy "%%d" "%Temp1%">nul 
23.
    set First= 
24.
25.
move "%Temp1%" "%PDFFile%">nul && echo "%~n1.pdf" erstellt & echo\ 
26.
popd 
27.
goto :eof
Falls die erstellten PDF den Namen des Ordners (nicht des Unterordners) erhalten sollen, wäre als Zeile 8
set "PDFFile=%root%\%~n2.pdf"
zu verwenden.
Und kann man den Vorgang noch beschleunigen? Da er mit den 2 tmp Files arbeitet ist es verdammt langsam.
Das "move" kann eigentlich nicht so wahnsinnig viel Zeit kosten ...
Da nun mal zum Sicherstellen der richtigen Reihenfolge die PDF einzeln hinzugefügt werden müssen, sehe ich keine Möglichkeit, den Ablauf zu beschleunigen ...

Grüße
bastla
Bitte warten ..
Mitglied: Sternex
22.09.2010 um 16:47 Uhr
Klasse jetzt passt alles! Danke!

mit der Geschwindigkeit ist mir nur aufgefallen da es manuell mit pdftk schneller geht.
Daher dachte ich es liegt am erstellen der tmp's...

Aber dann dauert es eben etwas länger. Hauptsache es geht!

Danke nochmal
Bitte warten ..
Ähnliche Inhalte
Windows Tools
PDFTK - Zusammenfügen mehrer Dateien mit gleichem Anfang
Frage von flo99987Windows Tools2 Kommentare

Hallo, ich verzweilfe etwas am PDFTK da auch meine Batch Kenntnisse eher zu Wünschen übrig lassen. Daher bitte ich ...

Batch & Shell
PDF Dateien mit PDFTKBuilderPortable zusammenfügen
gelöst Frage von makroll10Batch & Shell4 Kommentare

Hallo Allerseits, ich beabsichtige mit dem "PDFTKBuilderPortable" mehrere PDF-Dateien zusammen zu fassen. Eigentlich ist das ja auch ganz einfach: ...

Batch & Shell
Umbenennen von Dateien mit Ordnernamen und Unterordner
gelöst Frage von Xaero1982Batch & Shell10 Kommentare

Moin Zusammen, folgendes Problem: Ich habe einen Ordner. Nennen wir ihn "Fotos" In diesem Ordner sind dann Zig Unterordner ...

Batch & Shell
Dateien gleich Ordnernamen umbenennen (auch in allen Unterordnern)
gelöst Frage von OOmatrixOOBatch & Shell14 Kommentare

Hallo. Ich möchte in einem speziellen Ordner in ALLEN Unterordnern ALLE Dateien nach ihren Ordnernamen umbenennen. Ich habe mir ...

Neue Wissensbeiträge
Windows 10

Windows 10 Fall Creators Update - Neue Funktion Hyper-V Standardswitch kann ggf. Fehler bei Proxy Configs verursachen

Erfahrungsbericht von rzlbrnft vor 1 StundeWindows 101 Kommentar

Hallo Kollegen, Da wir die Gefahr lieben, haben wir bei einigen Usern nun mittlerweile das Creators Update drauf. Einige ...

Sicherheit

TLS-Zertifikat und privater Schlüssel von Microsofts Dynamics 365 geleakt

Information von Penny.Cilin vor 3 StundenSicherheit

Microsoft hat versehentlich das TLS-Zertifikat inklusive dem privaten Schlüssel seiner Business-Anwendung Dynamics 365 geleakt. TLS-Zertifikat und privater Schlüssel von ...

Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 1 TagViren und Trojaner2 Kommentare

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 1 TagRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Brainstorming, einfachste Option 1 getrenntes LAN (mit WAN zugang)
Frage von 132954LAN, WAN, Wireless13 Kommentare

Hi, folgendes: Wir bekommen eine Glasfaser Leitung, Und das sollte Optional so aussehen: Ein Modem/Router für das WAN, ein ...

Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Netzwerkgrundlagen
Hi eine blöde frage. xD
Frage von 132954Netzwerkgrundlagen12 Kommentare

Also: Habe 2012 r2 essentials neuinstalliert, allerdings installiert diese version ja gleich diesen gangen AD kram mit, den hab ...