Dateien Nummern auf Lückenlosigkeit prüfen in Verzeichnis mit Unterverzeichnissen
Hallo zusammen,
ich beziehe mich auf ein damals angesprochenes Thema:
Nummerierte Dateien auf Lückenlosigkeit überprüfen. Fehler in Datei ausgeben!
Vielen Dank für den Ansatz bastla, immer wieder cool was du für Lösungen zauberst.
Wir haben aktuell auch so ein Thema und haben nach einer Lösung von dir gesucht (kommen ja fast alle von dir).
Unsere PDFs liegen in einen Stammverzeichnis auf B:\ mit vielen Unterverzeichnissen je Jahr und Monat und wollen hier prüfen, ob Nummern im Kreis fehlen.
Der Start/Endwert ergibt sich im Grunde aus den Dateien selbst, sprich wenn jemand ein Dokument ablegt, bekam es die Nummer X und am Monatsende haben wir Nummer Y.
Start/Endwert wäre uns aber eigentlich egal und brauchen wir wohl nicht, Hauptsache wir finden evtl. fehlende Nummern.
Schema der Dateibezeichnungen als Beispiel:
"Anleitung D272150.pdf"
Verzeichnisstruktur:
Laufwerk\Jahr\Monat\Kategorie
B:\
B:\2021
B:\2021\01
B:\2021\01\A
B:\2021\01\B
B:\2021\02
B:\2021\02\A
B:\2021\02\B
B:\2021\03
B:\2021\03\A
B:\2021\03\B
...
Wir wollen also prüfen, ob es in allen dieser Verzeichnisse eine fehlende Nummer gibt.
Vielen Dank.
ich beziehe mich auf ein damals angesprochenes Thema:
Nummerierte Dateien auf Lückenlosigkeit überprüfen. Fehler in Datei ausgeben!
Vielen Dank für den Ansatz bastla, immer wieder cool was du für Lösungen zauberst.
Wir haben aktuell auch so ein Thema und haben nach einer Lösung von dir gesucht (kommen ja fast alle von dir).
Unsere PDFs liegen in einen Stammverzeichnis auf B:\ mit vielen Unterverzeichnissen je Jahr und Monat und wollen hier prüfen, ob Nummern im Kreis fehlen.
Der Start/Endwert ergibt sich im Grunde aus den Dateien selbst, sprich wenn jemand ein Dokument ablegt, bekam es die Nummer X und am Monatsende haben wir Nummer Y.
Start/Endwert wäre uns aber eigentlich egal und brauchen wir wohl nicht, Hauptsache wir finden evtl. fehlende Nummern.
Schema der Dateibezeichnungen als Beispiel:
"Anleitung D272150.pdf"
Verzeichnisstruktur:
Laufwerk\Jahr\Monat\Kategorie
B:\
B:\2021
B:\2021\01
B:\2021\01\A
B:\2021\01\B
B:\2021\02
B:\2021\02\A
B:\2021\02\B
B:\2021\03
B:\2021\03\A
B:\2021\03\B
...
Wir wollen also prüfen, ob es in allen dieser Verzeichnisse eine fehlende Nummer gibt.
Vielen Dank.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2108369798
Url: https://administrator.de/contentid/2108369798
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
6 Kommentare
Neuester Kommentar
Moin,
ohne Anfangs- und Endwert ist das mit Batch kaum realisierbar, da es mit Batch ziemlich Aufwendig ist, aus allen Dateinamen die Nummern herauszufiltern, anschließend Minimum- und Maximumwerte festzulegen und dann noch fehlende zu filtern.
Alleine schon aus Performancegründen wäre hier aber ohnehin Powershell zu empfehlen - damit ist das Ganze auch ohne Start- und Endwert ein klacks.
Powershell Leitfaden für Anfänger
Gruß Thomas
ohne Anfangs- und Endwert ist das mit Batch kaum realisierbar, da es mit Batch ziemlich Aufwendig ist, aus allen Dateinamen die Nummern herauszufiltern, anschließend Minimum- und Maximumwerte festzulegen und dann noch fehlende zu filtern.
Alleine schon aus Performancegründen wäre hier aber ohnehin Powershell zu empfehlen - damit ist das Ganze auch ohne Start- und Endwert ein klacks.
# Quellverzeichnis
$Source = "B:\"
# Alle Nummern der PDF-Dateien auflisten
$Num = Get-ChildItem -File -Recurse "$Source\*.pdf" | Where-Object BaseName -Match "\d+$" | Foreach-Object { [int]$Matches.0 }
# Minimum/Maximumwerte filtern
$min_max = $Num | Measure -Minimum -Maximum
# fehlende Nummern ausgeben
$min_max.Minimum..$min_max.Maximum | Where-Object { $Num -NotContains $_ }
Powershell Leitfaden für Anfänger
Gruß Thomas
Zitat von @chgs2011:
Habe dein Test mal versucht, er wirft mir aber einen INT32 Fehler:
Der Wert "009510089801" kann nicht in den Typ "System.Int32" konvertiert werden.
Fehler: "Der Wert für einen Int32 war zu groß oder zu klein."
Ok, in deinem Beispiel war die Nummer deutlich kleiner. Wenn die Nummern auch so groß sein können, nehmen wir stattdessen halt long.Habe dein Test mal versucht, er wirft mir aber einen INT32 Fehler:
Der Wert "009510089801" kann nicht in den Typ "System.Int32" konvertiert werden.
Fehler: "Der Wert für einen Int32 war zu groß oder zu klein."
# Quellverzeichnis
$Source = "B:\"
# Alle Nummern der PDF-Dateien auflisten
$Num = Get-ChildItem -File -Recurse "$Source\*.pdf" | Where-Object BaseName -Match "\d+$" | Foreach-Object { [long]$Matches.0 }
# Minimum/Maximumwerte filtern
$min_max = $Num | Measure -Minimum -Maximum
# fehlende Nummern ausgeben
$min_max.Minimum..$min_max.Maximum | Where-Object { $Num -NotContains $_ }
Zitat von @chgs2011:
Das Script "*.ps1" läuft an und schließt dann nach paar Sekunden wieder, ohne jegliche Rückmeldung / Log etc.
Erstmal geben die Befehle nur die fehlenden Nummern auf der Konsole aus. Was genau mit den Nummern passieren soll, hast du ja bislang nicht näher spezifiziert.Das Script "*.ps1" läuft an und schließt dann nach paar Sekunden wieder, ohne jegliche Rückmeldung / Log etc.
Um den größtmöglichen Lerneffekt zu erziehlen, empfiehlt es sich für Anfänger immer, die einzelnen Befehle erstmal in der Konsole zu testen.
So kannst du dir erstmal angucken: Welcher Befehl erzeugt welche Ausgabe, wie sehen hinterher meine Variablen aus, usw.
Wenn du das Ganze hinterher als Skript laufen lässt, hast du eben verschiedenste Optionen.
Du könntest...
- das Skript mit Parameter -NoExit starten, damit das Fenster am Ende offen bleibt
- (wie bei cmd auch) "pause" ans Ende des Skript hinzufügen, damit dieses offen bleibt, bis man die Eingabetaste drückt
- die Ausgabe in eine Datei schreiben lassen
- mit der Ausgabe weitere Aktionen durchführen
Um die Ausgabe z. B. in eine Log mitschreiben zu lassen
# fehlende Nummern ausgeben und in Datei schreiben
$min_max.Minimum..$min_max.Maximum | Where-Object { $Num -NotContains $_ } | Tee-Object "C:\Pfad\zur\Logdatei.txt"
Bitte beachte auch den
Gruß Thomas