PDFs mit fast gleichem Namen zusammenfügen und neu benennen
Liebe Community,
obwohl ich schon überall gegoogelt und auch Diverses ausprobiert habe, ergibt sich für mich ein scheinbar unlösbares Problem. Ich bin wirklich ein Anfänger und scheinbar auch ohne Plan B !!!
Ich brauche ein Batch-Datei oder Ähnliches, was mir bei meiner Arbeit wirklich viel Zeit ersparen würde und meine aktuelle Frustgrenze wieder spürbar anhebt.
Folgendes Problem liegt vor:
Auf meinem H: Laufwerk habe ich in der Datei "LS06_2018" ca. 8000 pdf-Dateien. Die Namen der Dateien bestehen immer aus Zahlen plus einer mit Bindestrich oder auch mit Klammern ergänzten Zahl.
Zum Beispiel:
1062158-1.pdf
1063503(1).pdf
Zudem gibt es diese Dateien ein zweites mal, immer mit dem Anhang "-2" bzw "(2)".
Zum Beispiel:
1062158-2.pdf
1063503(2).pdf
Nun sollen die Dateien mit der selben Hauptnummer als eine pdf-Datei zusammen gefügt werden und die Endung "-S2" erhalten, z.B:
1062158-1.pdf + 1062158-2.pdf = 1062158-S2.pdf
1063503(1).pdf + 1063503(2).pdf = 1063503(S2).pdf
Die Dateien alle einzeln zusamenzufügen und neu zu benennen lässt mich aufgrund der dabei auftretenden Fehlerhäufigkeit schon fast ergrauen!!!
Zur oben genannten Problematik kommt noch erschwerend hinzu, das die Zahlenfolgen nicht immer fortlaufend sind bzw. auch Zahlensprünge aufweisen.
Ich hoffe das es hier einen Profi gibt, welcher über das Problem nur lächelt und mir eine pasende Lösung aufzeigen kann.
Bitte habt ein Nachsehen bei meiner Fragestellung, aber ich habe bei der bisherigen Lösung scheinbar keinen guten Start im neuen Jahr 2021 erwischt.
Danke schon mal im Voraus für Eure Tipps, Tricks und Lösungsvorschläge!!!
Falls es hilft, als einfliesbare Software steht mir Adobe Acrobat DC zur Verfügung - lade aber auch gerne etwas anderes aus dem Netz herunter, wenn es doch nur helfen würde.
Gruss
Batchanfaenger
obwohl ich schon überall gegoogelt und auch Diverses ausprobiert habe, ergibt sich für mich ein scheinbar unlösbares Problem. Ich bin wirklich ein Anfänger und scheinbar auch ohne Plan B !!!
Ich brauche ein Batch-Datei oder Ähnliches, was mir bei meiner Arbeit wirklich viel Zeit ersparen würde und meine aktuelle Frustgrenze wieder spürbar anhebt.
Folgendes Problem liegt vor:
Auf meinem H: Laufwerk habe ich in der Datei "LS06_2018" ca. 8000 pdf-Dateien. Die Namen der Dateien bestehen immer aus Zahlen plus einer mit Bindestrich oder auch mit Klammern ergänzten Zahl.
Zum Beispiel:
1062158-1.pdf
1063503(1).pdf
Zudem gibt es diese Dateien ein zweites mal, immer mit dem Anhang "-2" bzw "(2)".
Zum Beispiel:
1062158-2.pdf
1063503(2).pdf
Nun sollen die Dateien mit der selben Hauptnummer als eine pdf-Datei zusammen gefügt werden und die Endung "-S2" erhalten, z.B:
1062158-1.pdf + 1062158-2.pdf = 1062158-S2.pdf
1063503(1).pdf + 1063503(2).pdf = 1063503(S2).pdf
Die Dateien alle einzeln zusamenzufügen und neu zu benennen lässt mich aufgrund der dabei auftretenden Fehlerhäufigkeit schon fast ergrauen!!!
Zur oben genannten Problematik kommt noch erschwerend hinzu, das die Zahlenfolgen nicht immer fortlaufend sind bzw. auch Zahlensprünge aufweisen.
Ich hoffe das es hier einen Profi gibt, welcher über das Problem nur lächelt und mir eine pasende Lösung aufzeigen kann.
Bitte habt ein Nachsehen bei meiner Fragestellung, aber ich habe bei der bisherigen Lösung scheinbar keinen guten Start im neuen Jahr 2021 erwischt.
Danke schon mal im Voraus für Eure Tipps, Tricks und Lösungsvorschläge!!!
Falls es hilft, als einfliesbare Software steht mir Adobe Acrobat DC zur Verfügung - lade aber auch gerne etwas anderes aus dem Netz herunter, wenn es doch nur helfen würde.
Gruss
Batchanfaenger
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 636838
Url: https://administrator.de/contentid/636838
Ausgedruckt am: 19.11.2024 um 20:11 Uhr
13 Kommentare
Neuester Kommentar
Hi
Ich würde ja vorschlagen erst mal die Dateinamen gerade zu ziehen ... aber naja
Unter der Voraussetzung das du das Modul PSWritePDF verwenden kannst sollte das so halbwegs passen:
Ich würde ja vorschlagen erst mal die Dateinamen gerade zu ziehen ... aber naja
Unter der Voraussetzung das du das Modul PSWritePDF verwenden kannst sollte das so halbwegs passen:
$searchpath = "c:\temp"
$destinationdir = "c:\temp\neu"
if (Get-Module -ListAvailable -Name PSWritePDF) {
Write-Host "PSWritePDF Module exists"
}
else {
Install-Module PSWritePDF -Force
}
$uniquenames = gci -Path $searchpath -File -Filter "*.pdf" | % {$_.BaseName.Substring(0,7)} | Sort -Unique
foreach ($uname in $uniquenames) {
#Die mit Bindestrich abarbeiten
$files = gci -Path $searchpath -File -Filter "$($uname)-*.pdf"
$filecount = ($files | Measure-Object).Count
if ($filecount -eq 2) {
write-host "$uname - : "
Merge-PDF -InputFile $files.FullName, $files[1].FullName -OutputFile "$destinationdir\$uname-S2.pdf"
Write-Host "`t Merged" -ForegroundColor Green
} else {
if ($filecount -ne 0){Write-Host "`tError Count is: $(($files | Measure-Object).Count)" -ForegroundColor Red }
}
#Die mit Klammern abarbeiten
$files = gci -Path $searchpath -File -Filter "$($uname)(*.pdf"
$filecount = ($files | Measure-Object).Count
if ($filecount -eq 2) {
write-host "$uname () : "
Merge-PDF -InputFile $files.FullName, $files[1].FullName -OutputFile "$destinationdir\$uname(S2).pdf"
Write-Host "`t Merged" -ForegroundColor Green
} else {
if ($filecount -ne 0){Write-Host "`tError Count is: $(($files | Measure-Object).Count)" -ForegroundColor Red }
}
}
Ich würde das ganze ja direkt mit Group-Object machen, das spart einem bei so was einiges an manueller Arbeit
Gut's Neues 🎆 2021
p.s. Nur zur Info an den TO, das oben sind beides Powershell Skripte.
$searchpath = "c:\temp"
$destinationdir = "c:\temp\neu"
if (!(Get-Module -ListAvailable -Name PSWritePDF)) {
Install-Module PSWritePDF -Force
}
ls $searchpath -Filter *.pdf -File | group {($_.Basename -split '[-\(]')[0]} | %{
if ($_.Count -gt 1){
Merge-PDF -InputFile $_.Group.Fullname -Outputfile (join-path $destinationdir "$($_.Name).pdf")
}else{
$_.Group | cp -Destination $destinationdir
}
}
Gut's Neues 🎆 2021
p.s. Nur zur Info an den TO, das oben sind beides Powershell Skripte.
aber warum auch immer klappen auch die beiden PowerShell-Skripte von Euch nicht so wie gewünscht
Mein Skript wurde hier einwandfrei getestet, funktioniert so wie von dir beschrieben. Wenn bei dir nicht machst du wohl bei dir einen Fehler, ist eher wahrscheinlich bei einem Anfänger der du ja zu sein scheinst.Zitat von @Batchanfaenger:
Aber egal was ich mache - bei mir ändert sich an den Dateien im entsprechenden Ordner leider gar nichts! Sehr schade, denn ich hatte mir auch von Deiner Idee sehr viel versprochen.
Gruß
batchanfaenger
Hast du wohl übersehen das die Dateien in einen separaten Ausgabe Ordner kopiert und nicht im Originalordner abgelegt werden 😉. Pfad in Zeile 2 anpassen und Ordner erstellen ...Aber egal was ich mache - bei mir ändert sich an den Dateien im entsprechenden Ordner leider gar nichts! Sehr schade, denn ich hatte mir auch von Deiner Idee sehr viel versprochen.
Gruß
batchanfaenger
Wenn das entsprechende Powershell Module (PSWritePDF) noch nicht installiert ist einmal das Skript elevated starten damit es installiert werden kann, dann lüppt dat auch.
Hallo,
ist zwar schon ein altes Thema. Ich habe ein vergleichbares Problem, schaffe aber nicht, den Code für mich passend anzupassen.
Er kopiert mir immer nur die PDF Dateien in den Zielordner.
Bei mir sollen Dateien im folgenden Format zusammengeführt werden:
Rechnung_123456.pdf
123456 Rechnungsanhang.pdf
123456 steht dann für die Rechnungsnummer.
Vielen Dank vorab für die Hilfe.
ist zwar schon ein altes Thema. Ich habe ein vergleichbares Problem, schaffe aber nicht, den Code für mich passend anzupassen.
Er kopiert mir immer nur die PDF Dateien in den Zielordner.
Bei mir sollen Dateien im folgenden Format zusammengeführt werden:
Rechnung_123456.pdf
123456 Rechnungsanhang.pdf
123456 steht dann für die Rechnungsnummer.
Vielen Dank vorab für die Hilfe.
Bei mir sollen Dateien im folgenden Format zusammengeführt werden:
Rechnung_123456.pdf
123456 Rechnungsanhang.pdf
Rechnung_123456.pdf
123456 Rechnungsanhang.pdf
$searchpath = "c:\temp"
$destinationdir = "c:\temp\neu"
if (!(Get-Module -ListAvailable -Name PSWritePDF)) {
Install-Module PSWritePDF -Force
}
ls $searchpath -Filter *.pdf -File | group {[regex]::match($_.Basename,'\d+').Value} | %{
if ($_.Count -gt 1){
Merge-PDF -InputFile $_.Group.Fullname -Outputfile (join-path $destinationdir "$($_.Name).pdf")
}else{
$_.Group | cp -Destination $destinationdir
}
}
Danke. Funktioniert fast. Die Reihenfolge ist jedoch falsch herum.
Mir wird im Code aber leider nicht klar, wo die Reihenfolge festgelegt ist.
Bei Powershell bin ich leider totaler Anfänger. Bisher habe ich nur VBA und SQL programmiert.
Ich möchte auch gerne nicht nur die fertige Lösung kopieren, sondern gerne auch verstehen, dass ich das auch mal für andere Fälle anpassen könnte. Eine kurze Erklärung wäre super.
Die Erste PDF soll Rechnung_123456.pdf sein und daran angefügt die 123456 Rechnungsanhang.pdf.
Zudem soll der Dateiname der zusammengefügten Datei identisch mit dem Dateinamen der 123456 Rechnungsanhang.pdf sein.
Wie ich den Dateinamen festlege, wird mir auch leider nicht klar.
Danke schon einmal.
Mir wird im Code aber leider nicht klar, wo die Reihenfolge festgelegt ist.
Bei Powershell bin ich leider totaler Anfänger. Bisher habe ich nur VBA und SQL programmiert.
Ich möchte auch gerne nicht nur die fertige Lösung kopieren, sondern gerne auch verstehen, dass ich das auch mal für andere Fälle anpassen könnte. Eine kurze Erklärung wäre super.
Die Erste PDF soll Rechnung_123456.pdf sein und daran angefügt die 123456 Rechnungsanhang.pdf.
Zudem soll der Dateiname der zusammengefügten Datei identisch mit dem Dateinamen der 123456 Rechnungsanhang.pdf sein.
Wie ich den Dateinamen festlege, wird mir auch leider nicht klar.
Danke schon einmal.
Zitat von @Bebbie:
Danke. Funktioniert fast. Die Reihenfolge ist jedoch falsch herum.
Mir wird im Code aber leider nicht klar, wo die Reihenfolge festgelegt ist.
Bei Powershell bin ich leider totaler Anfänger. Bisher habe ich nur VBA und SQL programmiert.
Ich möchte auch gerne nicht nur die fertige Lösung kopieren, sondern gerne auch verstehen, dass ich das auch mal für andere Fälle anpassen könnte. Eine kurze Erklärung wäre super.
Die Erste PDF soll Rechnung_123456.pdf sein und daran angefügt die 123456 Rechnungsanhang.pdf.
Zudem soll der Dateiname der zusammengefügten Datei identisch mit dem Dateinamen der 123456 Rechnungsanhang.pdf sein.
Danke. Funktioniert fast. Die Reihenfolge ist jedoch falsch herum.
Mir wird im Code aber leider nicht klar, wo die Reihenfolge festgelegt ist.
Bei Powershell bin ich leider totaler Anfänger. Bisher habe ich nur VBA und SQL programmiert.
Ich möchte auch gerne nicht nur die fertige Lösung kopieren, sondern gerne auch verstehen, dass ich das auch mal für andere Fälle anpassen könnte. Eine kurze Erklärung wäre super.
Die Erste PDF soll Rechnung_123456.pdf sein und daran angefügt die 123456 Rechnungsanhang.pdf.
Zudem soll der Dateiname der zusammengefügten Datei identisch mit dem Dateinamen der 123456 Rechnungsanhang.pdf sein.
Siehe Kommentare
$searchpath = "c:\temp"
$destinationdir = "c:\temp\neu"
# PSWritePDF Modul installieren wenn nicht vorhanden
if (!(Get-Module -ListAvailable -Name PSWritePDF)) {
Install-Module PSWritePDF -Force
}
# Dateien anhand der Rechnungsnummer im Basename der Datei gruppieren
ls $searchpath -Filter *.pdf -File | group {[regex]::match($_.Basename,'\d+').Value} | %{
# wenn es mehr als eine Datei in der Gruppe gibt
if ($_.Count -gt 1){
# Dateien der Gruppe anhand ihres Namens absteigend sortieren
$files = $_.Group | sort Name -Descending
# Dateien zusammenfassen und als Zieldateiname den der zweiten Datei der Gruppe benutzen
Merge-PDF -InputFile $files.Fullname -Outputfile (join-path $destinationdir "$($files[1].Name).pdf")
}else{
# nur eine Datei in der Gruppe => verschiebe die Datei nur
$_.Group | cp -Destination $destinationdir
}
}
Für alles weitere
Powershell Leitfaden für Anfänger
Guten Morgen,
ich habe nun aus der Skriptdatei eine .exe (Test.exe) erstellt. Funktioniert auch soweit.
Ich möchte mir nun noch eine Messagebox einbauen, die mir signalisiert, wenn das Skript fertig gelaufen ist.
Das habe ich mit folgendem Code realisiert.
Nach abgeschlossenem Skript zeigt er mir dann die gewünschte Messagebox an. Nach Klick auf ok kommt dann aber noch eine Messagebox mit Titel "Test.exe", Text "OK" und Button "OK".
Warum, ist mir aber nicht klar.
Woran liegt das?
ich habe nun aus der Skriptdatei eine .exe (Test.exe) erstellt. Funktioniert auch soweit.
Ich möchte mir nun noch eine Messagebox einbauen, die mir signalisiert, wenn das Skript fertig gelaufen ist.
Das habe ich mit folgendem Code realisiert.
[System.Windows.Forms.MessageBox]::Show(„Die abgelegten Dokumente wurden zusammengeführt“,“Auftrag abgeschlossen“,0)
Nach abgeschlossenem Skript zeigt er mir dann die gewünschte Messagebox an. Nach Klick auf ok kommt dann aber noch eine Messagebox mit Titel "Test.exe", Text "OK" und Button "OK".
Warum, ist mir aber nicht klar.
Woran liegt das?
Kursive Anführungszeichen sind böse ...
Und ansonsten kennt keiner dein komplettes Skript.
Und bitte hier nicht Threads von anderen Leuten zu deinen eigenen Zwecken kapern!! Einfach mal die Diskussionsrichtlinien lesen ... Post gemeldet.
Und ansonsten kennt keiner dein komplettes Skript.
Und bitte hier nicht Threads von anderen Leuten zu deinen eigenen Zwecken kapern!! Einfach mal die Diskussionsrichtlinien lesen ... Post gemeldet.