PDF Dateien automatisch Zusammenführen per Batch
Hallo Zusammen,
ich habe hier einige Beiträge gelesen aber aus keinem geschafft die Batch Datei für mich anzupassen. Deshalb muss ich leider einen neuen Beitrag eröffnen, sorry dafür
Also möglichst kurze Beschreibung von dem was ich vorhabe:
Ich fange mal mit der Ordnerstruktur an glaube dann kann ich es besser erklären.
C:/Peter/RGNR0101/eg_rg.pdf (immer vorhanden)
C:/Peter/RGNR0101/dl1_rg.pdf (immer vorhanden)
C:/Peter/RGNR0101/dl2_rg.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/dl3_rg.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/dl4_rg.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/dl5_rg.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/ln1.pdf (immer vorhanden)
C:/Peter/RGNR0101/ln2.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/ln3.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/ln4.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/ln5.pdf (nicht immer vorhanden)
1. Diese Dateien sollen, sofern vorhanden, genau in dieser Reihenfolge zusammen geführt werden.
2. Die neue PDF Datei soll den Namen des Ordners bekommen
3. Dann soll die neue PDF Datei in den Ordner C:/Peter verschoben werden
4. Der Ordner mit den einzelnen Dateien soll dann in C:/archiv verschoben werden.
5. Am liebsten soll das soweit automatisch sein das erkannt wird ob ob im Ordner C:/Peter ein neuer Ordner vorhanden ist und das dieses Script dann für alle Ordner ausgeführt wird.
Ich hoffe ihr könnt mir helfen, mein Zeitmanagement ist total verschossen durch diese ganze PDF zusammenführerei Mir kommt es so vor als würde ich nichts anderes tun als PDF Dateien zusammen zu fügen
Ich würde dafür dann gerne PDFtk nutzen. Hatte ja schon einige Beiträge gelesen und damit ist ja wohl einiges realisierbar.
Ich freue mich auf eure Antworten
Rockett
ich habe hier einige Beiträge gelesen aber aus keinem geschafft die Batch Datei für mich anzupassen. Deshalb muss ich leider einen neuen Beitrag eröffnen, sorry dafür
Also möglichst kurze Beschreibung von dem was ich vorhabe:
Ich fange mal mit der Ordnerstruktur an glaube dann kann ich es besser erklären.
C:/Peter/RGNR0101/eg_rg.pdf (immer vorhanden)
C:/Peter/RGNR0101/dl1_rg.pdf (immer vorhanden)
C:/Peter/RGNR0101/dl2_rg.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/dl3_rg.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/dl4_rg.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/dl5_rg.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/ln1.pdf (immer vorhanden)
C:/Peter/RGNR0101/ln2.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/ln3.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/ln4.pdf (nicht immer vorhanden)
C:/Peter/RGNR0101/ln5.pdf (nicht immer vorhanden)
1. Diese Dateien sollen, sofern vorhanden, genau in dieser Reihenfolge zusammen geführt werden.
2. Die neue PDF Datei soll den Namen des Ordners bekommen
3. Dann soll die neue PDF Datei in den Ordner C:/Peter verschoben werden
4. Der Ordner mit den einzelnen Dateien soll dann in C:/archiv verschoben werden.
5. Am liebsten soll das soweit automatisch sein das erkannt wird ob ob im Ordner C:/Peter ein neuer Ordner vorhanden ist und das dieses Script dann für alle Ordner ausgeführt wird.
Ich hoffe ihr könnt mir helfen, mein Zeitmanagement ist total verschossen durch diese ganze PDF zusammenführerei Mir kommt es so vor als würde ich nichts anderes tun als PDF Dateien zusammen zu fügen
Ich würde dafür dann gerne PDFtk nutzen. Hatte ja schon einige Beiträge gelesen und damit ist ja wohl einiges realisierbar.
Ich freue mich auf eure Antworten
Rockett
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 427328
Url: https://administrator.de/forum/pdf-dateien-automatisch-zusammenfuehren-per-batch-427328.html
Ausgedruckt am: 30.12.2024 um 17:12 Uhr
41 Kommentare
Neuester Kommentar
Wie immer bei größeren Aufgaben bei denen man nicht weiterkommt: Das Problem teilen:
Hier sind es zwei:
1. Die Reihenfolge ist "beliebig" und nicht alphabetisch oder sonstwie geordnet ("eg_rg.pdf" passt nicht so recht in kein geordnetes schema)
2. Wie benutze ich die Kommandozeile von PDFtk?
Mein Problem ist das ich kein Windows System zu Hand habe
Daher die Lösung in Bash: (setz dir dafür schnell ne Linux VM auf, schadet sowieso nie)
1. Reihenfolge:
Da alle Dateien alphanumerisch zu ordnen sind, bis auf eg_rg, behandeln wir es extra, indem wir im Aktuellen Order nur diese Datei finden und in eine Variable namens "first" schreiben:
Die anderen PDFs lassen sich zum glück sortieren, daher suchen wir alle Dateien die NICHT eg_rg sind und sortieren diese alphanumerisch (default von sort), schreiben das ergebnis in eine zweite variable namens $sorted:
2. Automatisiert zusammenführen:
Unter Ununtu sind die sog. "poppler-utils" schon vorinstalliert, und die Syntax für das Mergen ist sehr einfach:
pdfunite datei1.pdf datein.pdf ausgabe.pdf
Daher lassen wir PDFtk aus dem Spiel und nutzen pdfunite (teil der poppler-utils)
Da wir alle Dateinamen in Variablen schon haben:
voilà
Edit: Die anderen Teile noch vergessen:
Den Namen vom Ordner kannst du mit basename bekommen
liefert RGNR0101
Verschieben kann du mit mv
Hier sind es zwei:
1. Die Reihenfolge ist "beliebig" und nicht alphabetisch oder sonstwie geordnet ("eg_rg.pdf" passt nicht so recht in kein geordnetes schema)
2. Wie benutze ich die Kommandozeile von PDFtk?
Mein Problem ist das ich kein Windows System zu Hand habe
Daher die Lösung in Bash: (setz dir dafür schnell ne Linux VM auf, schadet sowieso nie)
1. Reihenfolge:
Da alle Dateien alphanumerisch zu ordnen sind, bis auf eg_rg, behandeln wir es extra, indem wir im Aktuellen Order nur diese Datei finden und in eine Variable namens "first" schreiben:
first=$(find . -path '*eg_rg*')
Die anderen PDFs lassen sich zum glück sortieren, daher suchen wir alle Dateien die NICHT eg_rg sind und sortieren diese alphanumerisch (default von sort), schreiben das ergebnis in eine zweite variable namens $sorted:
sorted=$(find . -type f ! -path '*eg_rg.pdf' | sort)
2. Automatisiert zusammenführen:
Unter Ununtu sind die sog. "poppler-utils" schon vorinstalliert, und die Syntax für das Mergen ist sehr einfach:
pdfunite datei1.pdf datein.pdf ausgabe.pdf
Daher lassen wir PDFtk aus dem Spiel und nutzen pdfunite (teil der poppler-utils)
Da wir alle Dateinamen in Variablen schon haben:
pdfunite $first $sorted merged.pdf
voilà
Edit: Die anderen Teile noch vergessen:
Den Namen vom Ordner kannst du mit basename bekommen
basename '/home/Peter/RGNR0101'
Verschieben kann du mit mv
Powershell
PS: Und wie immer bei fremden Code: Vorher Datensicherung machen!
$Path='C:\Temp\'
$Archive='C:\Temp\Archiv'
$PdfTk='PfadZumProgramm'
foreach ($Folder in Get-ChildItem -Path $Path -Directory){
$FileList=@()
if (Test-Path -Path (Join-Path -Path $Folder -ChildPath "aeg_rg.pdf")){
$FileList+=Get-ChildItem -Path (Join-Path -Path $Folder -ChildPath "aeg_rg.pdf")
$FileList+=Get-ChildItem -Path (Join-Path -Path $Folder -ChildPath "dl?_rg.pdf")
$FileList+=Get-ChildItem -Path (Join-Path -Path $Folder -ChildPath "Ln?.pdf")
$MergedFile=Join-Path -Path $Path -ChildPath ((Split-Path -Path $Folder -Leaf)+".PDF")
$Argumentlist=($FileList -Join " ")+" cat output $MergedFile"
Start-Process -FilePath $PdfTk -Argumentlist $Argumentlist
Move-Item -Path $Folder -Destination $Archive
}
}
PS: Und wie immer bei fremden Code: Vorher Datensicherung machen!
es passiert nichts.
glaube ich nicht.1. https://docs.microsoft.com/de-de/powershell/scripting/components/ise/int ...
2. $PdfTk='C:\PDFtk\bin\pdftk.exe\' -> $PdfTk='C:\PDFtk\bin\pdftk.exe'
öhm
Diese Zeile liefert dir den Inhalt deiner Variable und schreibt das in die Ausgabe.
Wenn du das nun vor Schleifen, in Schleifen und nach Schleifen machst hast du einen Blick ob das was du willst da ankommt wo es soll.
Wenn du also keine Ausgabe bekommst liegt das vielleicht daran das deine IF Bedingung nicht greift.
Pack da eine Zeile rein oder in den Else Zweig (der noch nicht da steht) und du siehst wo im Code abgebogen wird. =)
write-host "füge hier deine Variable ein"
Diese Zeile liefert dir den Inhalt deiner Variable und schreibt das in die Ausgabe.
Wenn du das nun vor Schleifen, in Schleifen und nach Schleifen machst hast du einen Blick ob das was du willst da ankommt wo es soll.
Wenn du also keine Ausgabe bekommst liegt das vielleicht daran das deine IF Bedingung nicht greift.
Pack da eine Zeile rein oder in den Else Zweig (der noch nicht da steht) und du siehst wo im Code abgebogen wird. =)
Dann müsste zumindest ein Verzeichnis verschoben werden, oder eben eine Fehlermeldung geworfen..
da ich nur mit absoluten Pfaden arbeite uninteressant
2. Code mal Testweise geändert:
Siehe da das Ordner verschieben jetzt, da es in ELSE steht. Hat aber aus anderen Ordnern bzw vom Desktop heraus nicht funktioniert.
logisch, da die Bedingung nicht erfüllt wird
2. Code mal Testweise geändert:
Siehe da das Ordner verschieben jetzt, da es in ELSE steht. Hat aber aus anderen Ordnern bzw vom Desktop heraus nicht funktioniert.
3. Habe die Zeile die ich hinzugefügt habe wieder entnommen und auch aus dem Ordner NEW ausgeführt. Alle Ordner werden verschoben in denen mindestens die "aeg_rg.pdf" vorhanden ist. Was erstmal kein Problem darstellt da genau diese Datei IMMER da sein wird.
Das ist kein Problem - das ist eine gewollte VorsichtsmaßnahmeAber leider verschiebt er nur und erstellt keine PDF Datei
EDIT:
Mist ich weis nicht was ich eben geändert habe.. hatte etwas rum probiert... da wurde mir dann die PDF erstellt. Aber jetzt nicht mehr...
ich hatte bei einen der 2 PDF namen was leicht geändert weil ich die Datei namen ändern wollte. Dabei habe ich nicht gemerkt das aeg_rg.pdf 2 mal in dem Code hinterlegt ist und ihn bei nur einer der Zeilen auf ich glaube: aeg_rg_?.pdf geändert
wenn du ohne den Hauch einer Ahnung die Bedingungen änderst, kann ich mir hier Mühe geben ohne Ende - es wird zwecklos sein.EDIT:
Mist ich weis nicht was ich eben geändert habe.. hatte etwas rum probiert... da wurde mir dann die PDF erstellt. Aber jetzt nicht mehr...
ich hatte bei einen der 2 PDF namen was leicht geändert weil ich die Datei namen ändern wollte. Dabei habe ich nicht gemerkt das aeg_rg.pdf 2 mal in dem Code hinterlegt ist und ihn bei nur einer der Zeilen auf ich glaube: aeg_rg_?.pdf geändert
Zitat von @Rockett:
Ich habs! Also nicht ganz... das es geklappt hat hatte gar nichts damit zutun das ich die Datei namen ändern wollte. Sondern das es die selben Ordner im Archiv schon gab. wenn also die selben Ordner im Archiv schon vorhanden sind (was normal nicht der Fall ist aber zur Lösung des Problems beitragen könnte) dann erstellt er die PDF Dateien!
Hilft das?
du hast mit keiner Silbe erwähnt, dass das das Archiv überschrieben wird / werden kann!Ich habs! Also nicht ganz... das es geklappt hat hatte gar nichts damit zutun das ich die Datei namen ändern wollte. Sondern das es die selben Ordner im Archiv schon gab. wenn also die selben Ordner im Archiv schon vorhanden sind (was normal nicht der Fall ist aber zur Lösung des Problems beitragen könnte) dann erstellt er die PDF Dateien!
Hilft das?
Achja und dann gibt es folgendes noch aus:
Move-Item : Eine Datei kann nicht erstellt werden, wenn sie bereits vorhanden ist.
> In C:\Peter\New\Douglas.ps1:22 Zeichen:9
> + Move-Item -Path $Folder -Destination $Archive
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : WriteError: (C:\Peter\New\P190111999:DirectoryInfo) [Move-Item], IOException
> + FullyQualifiedErrorId : MoveDirectoryItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand
>
> Move-Item : Eine Datei kann nicht erstellt werden, wenn sie bereits vorhanden ist.
> In C:\Peter\New\Douglas.ps1:22 Zeichen:9
> + Move-Item -Path $Folder -Destination $Archive
> + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> + CategoryInfo : WriteError: (C:\Peter\New\Test:DirectoryInfo) [Move-Item], IOException
> + FullyQualifiedErrorId : MoveDirectoryItemIOError,Microsoft.PowerShell.Commands.MoveItemCommand
EDIT:
Nur zur Info so sieht der Code aktuell aus:
du hast NUR den Dateinamen geändert! Und du wunderst dich, dass das mein Code nicht auf Anhieb funktioniert?Nur zur Info so sieht der Code aktuell aus:
Was für eine Zeitverschwendung.
Zitat von @Rockett:
und ich habe gesehen das du mit Absoluten Pfaden gearbeitet hast. Aber von Desktop aus passiert wirklich GAR NICHTS !
was meinst du, warum ich dir die Links gepostet habe? Starte die ISE - rotz meinen Code da per Copy&Paste rein und pass die Pfade an. Fertig. Dann sieht man nämlich auch irgendwelche Fehlermeldungen!und ich habe gesehen das du mit Absoluten Pfaden gearbeitet hast. Aber von Desktop aus passiert wirklich GAR NICHTS !
Ich habe natürlich auch die echten Dateien umbenannt.
willst du mich verarschen?Wieso kopierst du nicht einen bis zehn Ordner 1:1 in ein Testverzeichnis?
Ich tue alles um bei der Lösung zu helfen.
tust du nicht - du bist am ratenDann erklärt sich was ich getan habe.
leider ist dem nicht so
kann ich dir sagen. Zitat von dir:
und was wissen wir jetzt: Beide Aussagen stimmen nicht
es passiert nichts.
sag ich kann nicht sagst du:Leider ist das wirklich so
und was wissen wir jetzt: Beide Aussagen stimmen nicht
Zitat von @Rockett:
Und um es nochmal Ausdrücklich zu sagen. Dieser Fehler kommt nur wenn im Archiv ein Ordner mit dem selben Namen bereits vorhanden ist und folgendes passiert:
1. Ordner werden nicht verschoben (da im ziel schon vorhanden)
2. PDF Datei wird erstellt
Wenn ich aber die Ordner aus dem Archiv wieder lösche (So wie es sein soll. Die sollen da ja nämlich erst durch das Scirpt mit verschoben werden. Dann
1. werden die Ordner verschoben
2. wird keine PDF Datei erstellt
na sieh mal einer guck - eine Fehlerbeschreibung.Und um es nochmal Ausdrücklich zu sagen. Dieser Fehler kommt nur wenn im Archiv ein Ordner mit dem selben Namen bereits vorhanden ist und folgendes passiert:
1. Ordner werden nicht verschoben (da im ziel schon vorhanden)
2. PDF Datei wird erstellt
Wenn ich aber die Ordner aus dem Archiv wieder lösche (So wie es sein soll. Die sollen da ja nämlich erst durch das Scirpt mit verschoben werden. Dann
1. werden die Ordner verschoben
2. wird keine PDF Datei erstellt
mein Rechner scheint schneller, wie deiner zu sein. Packe mal ein
-wait
Zitat von @Rockett:
So wie es scheint verschiebt dein Script die Ordner BEVOR er die PDF Dateien erstellt.
jep - siehe mein vorheriger Post (-wait)So wie es scheint verschiebt dein Script die Ordner BEVOR er die PDF Dateien erstellt.
Zitat von @Rockett:
Und bitte MERKE: Bei mir geht es nur wenn der Script im selben Ordner ist. Wer weiß warum...
Und bitte MERKE: Bei mir geht es nur wenn der Script im selben Ordner ist. Wer weiß warum...
na ich. Ein Fall von PEBCAK
$Path='C:\Peter\New\'
$Archive='C:\Peter\Archiv\'
$PdfTk='C:\PDFtk\pdftk.exe'
foreach ($Folder in Get-ChildItem -Path $Path -Directory){
$FileList=@()
if (Test-Path -Path (Join-Path -Path $Folder.FullName -ChildPath "aeg_rg.png")){
$FileList+=Get-ChildItem -Path (Join-Path -Path $Folder.FullName -ChildPath "aeg_rg.png")
$FileList+=Get-ChildItem -Path (Join-Path -Path $Folder.FullName -ChildPath "dl?_rg.png")
$FileList+=Get-ChildItem -Path (Join-Path -Path $Folder.FullName -ChildPath "Ln?.png")
$MergedFile=Join-Path -Path $Path -ChildPath ((Split-Path -Path $Folder -Leaf)+".PDF")
$Argumentlist=($FileList -Join " ")+" cat output $MergedFile"
Start-Process -FilePath $PdfTk -Argumentlist $Argumentlist -Wait
Move-Item -Path $Folder.FullName -Destination $Archive
}
}
Zitat von @Rockett:
Würde es große Umstände machen wenn das Script jetzt noch in eine vorhandene log Datei schreibt, mit einem Zeitstempel, wann er die Datei erstellt hat ? *duck*
Würde es große Umstände machen wenn das Script jetzt noch in eine vorhandene log Datei schreibt, mit einem Zeitstempel, wann er die Datei erstellt hat ? *duck*
Move-Item -Path $Folder -Destination $Archive
ersetzen durch
if (Test-Path -Path $MergedFile){
Move-Item -Path $Folder -Destination $Archive
(Get-Date -uFormat "%Y-%m-%d %H.%M.%S ")+$MergedFile | Out-File c:\temp\my.log -append
}
ne - eben nicht. Ich habe den Code angepasst - ich hatte da einen Fehler gemacht, der auf meinem System allerdings nicht aufgefallen ist.