nathalem
Goto Top

Suchschleife Batch

Ich versuche eine Batchdatei du schreiben die einen Ordner durchsucht

Hallo zusammen,

durch unverständige Fehlerhafte Exporte ist folgendes Problem aufgetreten.
Es gibt knapp 100 Ordner mit einer Hand voll bis mehrere 1000 HTML Dateien darin die aufsteigend durchnummeriert sind jedoch gibt es bei einigen der größeren das Problem das aufgetreten das einige Dateien Fehlen.
Im Ordner sieht das dann circa so aus

1
2
3
4
5
231
232
233
234
271
272
719
720
721
739
740
741
742
..

Wie ersichtlich ist fehlen 2 Bereiche.
Ich würde nun gerne eine Batchdatei schreiben die im inneren des Ordners gestartet wird und guckt
gibt es "1.html"
wenn nein -> 1.html fehlt
wenn ja -> gibt es 2.html
wenn nein -> 2.html fehlt
usw.

Wenn eine Datei fehlt soll die Schleife abgebrochen werden und eine MassageBox oder ähnliches auftauchen in der man darüber informiert wird damit man die restlichen Dateien neu exportieren kann.

Wäre super wenn ihr mir helfen könntet.

Content-ID: 204862

Url: https://administrator.de/forum/suchschleife-batch-204862.html

Ausgedruckt am: 27.12.2024 um 07:12 Uhr

rubberman
rubberman 11.04.2013 aktualisiert um 21:33:56 Uhr
Goto Top
Hallo Nathalem, willkommen im Forum.

Versuche mal diesen Code:
@echo off &setlocal EnableDelayedExpansion
set /a count=0, max=0
for /f "delims=" %%i in ('dir /a-d /b *.html^|findstr /rixc:"[1-9][0-9]*\.html"') do (  
  set /a count+=1
  if %%~ni gtr !max! set /a max=%%~ni
)
echo Anzahl HTML Dateien: %count%
echo Groesster Dateiname: %max%.html
echo(
if %count%==%max% (echo *** OK ***) else echo *** Dateien fehlen^^! ***
echo(
pause

Eine Unsicherheit besteht aber bereits im Ansatz. Wenn nur die letzten Dateien fehlen sollten (also nicht exportiert wurden), wirst du das so nie feststellen können.

Grüße
rubberman
Endoro
Endoro 11.04.2013 aktualisiert um 21:42:47 Uhr
Goto Top
Hallo Nathalem,

zeigt dir fehlende Dateien im aktuellen Ordner an:

@echo off&setlocal enabledelayedexpansion
for %%i in (*.html) do if %%~ni gtr !cnt! set "cnt=%%~ni"  
for /l %%i in (0,1,%cnt%) do if not exist "%%i.html" echo missing: %%~fi.html  
pause

Du musst dafür sorgen, dass die "letzte" mit dem grössten Wert vorhanden ist.

Gruss!
Nathalem
Nathalem 11.04.2013 um 21:47:01 Uhr
Goto Top
Funktioniert schon mal ganz gut.
Vielen dank für den Tipp aber das unwahrscheinlich da das Programm aus irgeneinem Grund von hinten und von vorne exportiert.
Ich habe eben mal den Fehler provoziert indem ich Dateien weg genommen habe.
Das Programm sagt zwar das Dateien Fehlen jedoch nicht welche.
Kannst du etwas machen damit das Programm wenn etwas fehlt sofort Stoppt und sagt welches fehlt?
Nathalem
Nathalem 11.04.2013 um 21:49:07 Uhr
Goto Top
warte ich teste erstmal die Antwort von Endoro
Nathalem
Nathalem 11.04.2013 um 21:56:00 Uhr
Goto Top
hat geklappt ihr seid super face-smile
rubberman
rubberman 11.04.2013 aktualisiert um 22:43:11 Uhr
Goto Top
Hallo Nathalem,

eine Bemerkung noch. Beide Lösungen stoppen nicht bei der ersten fehlenden Datei. Der Grund dafür ist, dass zunächst die Datei mit der größten Zahl als Dateiname gefunden werden muss. Während im Explorerfenster die Dateien numerisch geordnet erscheinen, wird in der Batchdatei (auf einem NTFS) die Sortierung alphanumerisch durchgeführt. Bei 1000 Dateien also bspw. so:
1.html
10.html
100.html
1000.html
101.html
102.html
103.html
104.html
105.html
106.html
107.html
108.html
109.html
11.html
...
Man muss (wie Endoro gezeigt hat) anschließend numerisch aufsteigend jede einzelne Datei vergleichen um die fehlenden Dateien entsprechend geordnet anzuzeigen.

Grüße
rubberman