Nummerierte Dateien auf Lückenlosigkeit überprüfen. Fehler in Datei ausgeben!
Hallo,
ich habe sehr viele Dateien in einem Ordner auf Vollständigkeit zu überprüfen. Eventuell auftreten Lücken (fehlende Datein) mußten bisher mit erhöhtem Zeitaufwand aufgespürt werden.
Um mir die Arbeit zukünftig zu erleichtern, wäre es hilfreich eine Batch zu haben, die den Ordner durcharbeitet und jede "Lücke" (fehlende Nummer) in eine Datei zB. Fehler.log ausgibt!
Beispiel:
c:\Temp
3401.txt <- START (hier im Beispiel)
3402.txt
3403.txt
3404.txt
3406.txt
3407.txt
3634.txt
3635.txt
3640.txt
3641.txt
...
3997.txt
3998.txt
3999.txt
4000.txt <- ENDE (hier im Beispiel)
Hier sollte in der Fehler.log folgende Dateien als fehlende Dateien aufgelistet werden:
3405.txt
3636.txt
3637.txt
3638.txt
3639.txt
Anmerkung: START (hier 3401) und ENDE (4000) sind eindeutig und können für eine Schleife (von 3401 bis 4000) benutzt werden! START und ENDE variieren!
Zwei Szenarios sind möglich!
1) nur durchnummerierte Dateien -> 1234.txt
2) Nummer+Dateinamen 1234 Objekt Kala.txt
Es wäre schön, wenn jemand eine Lösung parat hätte!
Vielen Dank im Voraus
AndyChrist
ich habe sehr viele Dateien in einem Ordner auf Vollständigkeit zu überprüfen. Eventuell auftreten Lücken (fehlende Datein) mußten bisher mit erhöhtem Zeitaufwand aufgespürt werden.
Um mir die Arbeit zukünftig zu erleichtern, wäre es hilfreich eine Batch zu haben, die den Ordner durcharbeitet und jede "Lücke" (fehlende Nummer) in eine Datei zB. Fehler.log ausgibt!
Beispiel:
c:\Temp
3401.txt <- START (hier im Beispiel)
3402.txt
3403.txt
3404.txt
3406.txt
3407.txt
3634.txt
3635.txt
3640.txt
3641.txt
...
3997.txt
3998.txt
3999.txt
4000.txt <- ENDE (hier im Beispiel)
Hier sollte in der Fehler.log folgende Dateien als fehlende Dateien aufgelistet werden:
3405.txt
3636.txt
3637.txt
3638.txt
3639.txt
Anmerkung: START (hier 3401) und ENDE (4000) sind eindeutig und können für eine Schleife (von 3401 bis 4000) benutzt werden! START und ENDE variieren!
Zwei Szenarios sind möglich!
1) nur durchnummerierte Dateien -> 1234.txt
2) Nummer+Dateinamen 1234 Objekt Kala.txt
Es wäre schön, wenn jemand eine Lösung parat hätte!
Vielen Dank im Voraus
AndyChrist
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 127872
Url: https://administrator.de/contentid/127872
Ausgedruckt am: 08.11.2024 um 09:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo Andy!
Falls ich das richtig verstehe (es ist nur der Anfang des Dateinamens zu prüfen, da im Anschluss an die laufende Nummer zusätzlicher Text folgen kann), könnte das etwa so aussehen (ist allerdings ungetestet):
Grüße
bastla
Falls ich das richtig verstehe (es ist nur der Anfang des Dateinamens zu prüfen, da im Anschluss an die laufende Nummer zusätzlicher Text folgen kann), könnte das etwa so aussehen (ist allerdings ungetestet):
@echo off & setlocal
set "Ordner=C:\Temp"
set "Typ=txt"
set /a Von=3401
set /a Bis=4000
set "Log=D:\Fehler.log"
set "DirList=%temp%\DirList.txt"
>"%DirList%" dir /b "%Ordner%\*.%Typ%"
if exist "%Log%" del "%Log%"
for /L %%i in (%Von%,1,%Bis%) do findstr /b "%%i" "%DirList%"||>>"%Log%" echo %%i.txt
del "%DirList%"
bastla
Hallo Bastla,
ich habe ein ähnliches Problem!
Vielleicht kannst du mir auch dabei helfen.
Ich muss in einem Verzeichniss überprüfen ob die Dateien fortlaufen sind oder doppelt sind!
Dateinamen sind wie folgt aufgebaut:
XXX00001_Beschreibung.pdf
XXX =Fixer Bestandteil 3 Stellig z.B. SCN
00001=fortlaufende Numerierung 5 Stellig
_=Trennzeichen
Beschreibung=Varibler Zusatztext z.B Privat oder Bild etc.
Im Verzeichniss liegen z.B. die folgenden Dateien:
SCN00001_Privat.pdf
SCN00002_Bild.pdf
SCN00003_Privat-Informationen.pdf
.
.
.SCN00622_Privat-.pdf
Es soll also nur geprüft werden ob die ersten 8 Zeichen im Dateinamen doppelt sind und fortlaufend.
Eine Ausgabe der Fehlerdatei über eine Log Datei reicht mir komplett aus.
Hast du dafür eine Idee
Vielen Dank Martin
ich habe ein ähnliches Problem!
Vielleicht kannst du mir auch dabei helfen.
Ich muss in einem Verzeichniss überprüfen ob die Dateien fortlaufen sind oder doppelt sind!
Dateinamen sind wie folgt aufgebaut:
XXX00001_Beschreibung.pdf
XXX =Fixer Bestandteil 3 Stellig z.B. SCN
00001=fortlaufende Numerierung 5 Stellig
_=Trennzeichen
Beschreibung=Varibler Zusatztext z.B Privat oder Bild etc.
Im Verzeichniss liegen z.B. die folgenden Dateien:
SCN00001_Privat.pdf
SCN00002_Bild.pdf
SCN00003_Privat-Informationen.pdf
.
.
.SCN00622_Privat-.pdf
Es soll also nur geprüft werden ob die ersten 8 Zeichen im Dateinamen doppelt sind und fortlaufend.
Eine Ausgabe der Fehlerdatei über eine Log Datei reicht mir komplett aus.
Hast du dafür eine Idee
Vielen Dank Martin
Hallo Spencer099!
Könnte etwa so gehen:
Grüße
bastla
Könnte etwa so gehen:
@echo off & setlocal
set "Ordner=D:\Viele Dateien"
set "Maske=*_*.pdf"
set "Fix=SCN"
set "Log=D:\Fehler.log"
set "DirList=%temp%\DirList.txt"
type nul>"%DirList%"
del "%Log%" 2>nul
set /a Nr=100000
set "Fehlende="
for %%i in ("%Ordner%\%Maske%") do call :ProcessFile "%%~nxi"
if defined Fehlende (
echo\
echo Nummern nicht fortlaufend - erste Fehlende: %Fehlende%
)>>"%Log%"
del "%DirList%" 2>nul
goto :eof
:ProcessFile
for /f "delims=_" %%a in (%1) do set "Kennz=%%a"
set /a Nr+=1
if "%Kennz%" neq "%Fix%%Nr:~-5%" if not defined Fehlende set "Fehlende=%Fix%%Nr:~-5%"
findstr "%Kennz%" "%DirList%">nul && >>"%Log%" echo Doppelt: %~1 || >>"%DirList%" echo %Kennz%
goto :eof
bastla
Hallo Spencer099!
Wenn die Daten in den Zeilen 2 bis 4 an Deine Gegebenheiten angepasst sind, kann ich mir das Ergebnis nicht erklären - um aber zumindest die Eventualität Groß-/Kleinschreibung hinsichtlich des "fixen" Teil "SCN" zu berücksichtigen, verwende bitte folgende Zeile 23:
[Edit]
bzw verwende besser diese Version:
- damit wird tatsächlich nur noch die Nummer geprüft.
Um dies auch für die Dubletten so umzusetzen, könntest Du gleich den gesamten letzten Teil austauschen:
[/Edit]
Um den Ablauf besser nachvollziehen zu können, wäre es auch sinnvoll, aus dem "
einzufügen.
Grüße
bastla
Wenn die Daten in den Zeilen 2 bis 4 an Deine Gegebenheiten angepasst sind, kann ich mir das Ergebnis nicht erklären - um aber zumindest die Eventualität Groß-/Kleinschreibung hinsichtlich des "fixen" Teil "SCN" zu berücksichtigen, verwende bitte folgende Zeile 23:
if /i "%Kennz%" neq "%Fix%%Nr:~-5%" if not defined Fehlende set "Fehlende=%Fix%%Nr:~-5%"
bzw verwende besser diese Version:
if "%Kennz:~3,5%" neq "%Nr:~-5%" if not defined Fehlende set "Fehlende=%Nr:~-5%"
Um dies auch für die Dubletten so umzusetzen, könntest Du gleich den gesamten letzten Teil austauschen:
:ProcessFile
for /f "delims=_" %%a in (%1) do set "Kennz=%%a"
set "Kennz=%Kennz:~3,5%"
set /a Nr+=1
if "%Kennz%" neq "%Nr:~-5%" if not defined Fehlende set "Fehlende=%Nr:~-5%"
findstr "%Kennz%" "%DirList%">nul && >>"%Log%" echo Doppelt: %~1 || >>"%DirList%" echo %Kennz%
goto :eof
Um den Ablauf besser nachvollziehen zu können, wäre es auch sinnvoll, aus dem "
echo off
" in Zeile 1 (vorübergehend) ein "echo on
" zu machen und den Batch aus der CMD-Shell zu starten bzw zumindest unmittelbar vor Zeile 18 eine Zeilepause
Grüße
bastla
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, 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, Hauptsache wir finden evtl. fehlende Nummern.
Datei heißt 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 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, 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, Hauptsache wir finden evtl. fehlende Nummern.
Datei heißt 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
...