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

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, 9064 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 ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Mehrere PDF-Dateien per Batch zusammenfügen (1)

Frage von Grimmli zum Thema Batch & Shell ...

Drucker und Scanner
Problem mit Ausdruck von PDF Dateien (4)

Frage von CountryBoy zum Thema Drucker und Scanner ...

Viren und Trojaner
gelöst "Gefährlichkeit" von PDF-Dateien (8)

Frage von thaefliger zum Thema Viren und Trojaner ...

Batch & Shell
gelöst Dateien aus unterordnern in Hauptverzeichniss zusammenführen (2)

Frage von sedada zum Thema Batch & Shell ...

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