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
GELÖST

Nummerierte Dateien auf Lückenlosigkeit überprüfen. Fehler in Datei ausgeben!

Frage Entwicklung Batch & Shell

Mitglied: Andichrist

Andichrist (Level 1) - Jetzt verbinden

25.10.2009 um 16:17 Uhr, 7087 Aufrufe, 10 Kommentare

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
Mitglied: bastla
25.10.2009 um 16:53 Uhr
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):
01.
@echo off & setlocal 
02.
set "Ordner=C:\Temp" 
03.
set "Typ=txt" 
04.
set /a Von=3401 
05.
set /a Bis=4000 
06.
set "Log=D:\Fehler.log" 
07.
 
08.
set "DirList=%temp%\DirList.txt" 
09.
>"%DirList%" dir /b "%Ordner%\*.%Typ%" 
10.
if exist "%Log%" del "%Log%" 
11.
for /L %%i in (%Von%,1,%Bis%) do findstr /b "%%i" "%DirList%"||>>"%Log%" echo %%i.txt 
12.
del "%DirList%"
Grüße
bastla
Bitte warten ..
Mitglied: Andichrist
25.10.2009 um 18:40 Uhr
Hallo bastla,

prima die Batch ' Suche.bat' macht genau das, was sie machen soll! *TOP*

Jetzt hätte ich nur noch einen Vereinfachungswunsch beim Batchaufruf! ^^

Könnte man die Batch noch soweit anpassen, dass noch der Suchbereich als Parameter (VON -> BIS) beim Aufruf direkt mitgegeben werden könnte.

Also: suche 3401 4000

So müßte man die Batch nicht permanent wegen des Suchbereiches anpassen!

Gruß
Andy
Bitte warten ..
Mitglied: bastla
25.10.2009 um 18:53 Uhr
Hallo Andy!

Dazu brauchst Du ja nur die Zeilen 4 und 5 leicht zu ändern:
set /a Von=%1 
set /a Bis=%2
Zur Sicherheit kann natürlich vorweg noch geprüft werden, ob zumindest 2 Parameter angegeben wurden:
if [%2]==[] echo Verwendung: %~nx0 Von Bis & echo\ & pause & goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Andichrist
25.10.2009 um 23:47 Uhr
Hallo bastla,

ich danke Dir für Deine Lösung! Funktioniert 100%!

Ich mußte aber feststellen, das ein Batch-Aufruf per KLICK komfortabler ist!

Daher habe ich die VON/ BIS Abfrage in die Batch eingebaut!

Für die Leute die diese Lösung bevorzugen, einfach Zeile 4 und 5 (siehe Script von bastla) ersetzen!

echo Bitte START-Wert (VON) angeben: 
set /p Von=%1  
 
echo Bitte END-Wert (BIS) angeben: 
set /p Bis=%2

Viele Grüße
Andy
Bitte warten ..
Mitglied: bastla
25.10.2009 um 23:55 Uhr
Hallo Andy!

Eigentlich genügte auch:
set /p Von=Bitte START-Wert (VON) angeben:  
set /p Bis=Bitte END-Wert (BIS) angeben: 
Grüße
bastla
Bitte warten ..
Mitglied: Andichrist
26.10.2009 um 00:03 Uhr
'Alla gut' - überzeugt! *grins*

Du bist der Experte!

Sieht besser aus als mein gebasteltes.

Gruß
Andy
Bitte warten ..
Mitglied: Spencer099
01.12.2010 um 00:12 Uhr
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
Bitte warten ..
Mitglied: bastla
01.12.2010 um 19:51 Uhr
Hallo Spencer099!

Könnte etwa so gehen:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Viele Dateien" 
03.
set "Maske=*_*.pdf" 
04.
set "Fix=SCN" 
05.
set "Log=D:\Fehler.log" 
06.
 
07.
set "DirList=%temp%\DirList.txt" 
08.
type nul>"%DirList%" 
09.
del "%Log%" 2>nul 
10.
set /a Nr=100000 
11.
set "Fehlende=" 
12.
for %%i in ("%Ordner%\%Maske%") do call :ProcessFile "%%~nxi" 
13.
if defined Fehlende ( 
14.
    echo\ 
15.
    echo Nummern nicht fortlaufend - erste Fehlende: %Fehlende% 
16.
)>>"%Log%" 
17.
del "%DirList%" 2>nul 
18.
goto :eof 
19.
 
20.
:ProcessFile 
21.
for /f "delims=_" %%a in (%1) do set "Kennz=%%a" 
22.
set /a Nr+=1 
23.
if "%Kennz%" neq "%Fix%%Nr:~-5%" if not defined Fehlende set "Fehlende=%Fix%%Nr:~-5%" 
24.
findstr "%Kennz%" "%DirList%">nul && >>"%Log%" echo Doppelt: %~1 || >>"%DirList%" echo %Kennz% 
25.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: Spencer099
01.12.2010 um 21:05 Uhr
Hallo Bastla,

erste einmal vielen Dank für die schnelle Antwort.
Leider geht es nicht er schreibt mit in der Fehler.log folgendes hinein:


Nummern nicht fortlaufend - erste Fehlende: SCN00001

Hast du da noch eine Idee?

Grüße Spencer099
Bitte warten ..
Mitglied: bastla
01.12.2010 um 21:17 Uhr
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:
if /i "%Kennz%" neq "%Fix%%Nr:~-5%" if not defined Fehlende set "Fehlende=%Fix%%Nr:~-5%"
[Edit]
bzw verwende besser diese Version:
if "%Kennz:~3,5%" neq "%Nr:~-5%" if not defined Fehlende set "Fehlende=%Nr:~-5%"
- 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:
01.
:ProcessFile 
02.
for /f "delims=_" %%a in (%1) do set "Kennz=%%a" 
03.
set "Kennz=%Kennz:~3,5%" 
04.
set /a Nr+=1 
05.
if "%Kennz%" neq "%Nr:~-5%" if not defined Fehlende set "Fehlende=%Nr:~-5%" 
06.
findstr "%Kennz%" "%DirList%">nul && >>"%Log%" echo Doppelt: %~1 || >>"%DirList%" echo %Kennz% 
07.
goto :eof
[/Edit]

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 Zeile
pause
einzufügen.

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
Mehrere.csv Dateien zusammenfügen zu einer Datei mit bat (4)

Frage von Piotrney zum Thema Batch & Shell ...

XML
XML Datei Fehler? (1)

Frage von Patrick-IT zum Thema XML ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...