b-real
Goto Top

Dateiinhalt auslesen, wenn Kriterium zutrifft ganze Datei löschen

Hi Community,

ich hab eine Frage zum Auslesen von Dateiinhalten, hoffentlich weiß hier wer weiter.

Und zwar bekomme ich von einem Konverter Dateien, die ich dann per Batch abhole, umbenenne und verschiebe. Manchmal erstellt der Konverter aber leere Daten, in denen nur der Start-Satz (beginnend mit 01LAGERD) und der Ende-Satz (beginnend mit 98LAGERD) steht. Aber kein richtiger Inhalt, es sieht dann so aus (das 131004 danach ist ein Zeitstempel und variiert je nach aktuellem Tagesdatum):

01LAGERD       131004
98LAGERD       131004

Diese Dateien möchte ich löschen, da sie nicht benötigt werden. Es lässt sich leider nicht verhindern, dass der Konverter diese Daten manchmal erstellt.

Die Dateien mit richtigem Inhalt dürfen aber nicht gelöscht werden. Diese sehen zB so aus:

01LAGERD       1308060000000000J
23LAGERD       0011485690        00001012533                         000091   
24LAGERD       0011485690        XXXX Zentrallager - NEU       Straße 3, Objekt 2
25LAGERD       0011485690        P000010010Anlieferung um 19:00 Uhr
22LAGERD       0011485690        130809 850                  092239
98LAGERD       13080600000000000000000006

Oder so:

01LAGERD       1308050000000000J
335324684    00142090           1307500002     00000360000VL  Verlesung   20130806VTD
335324692    00142090           1307500002     00000060000VL  Verlesung   20130806VTD
335324693    00142091           1307500003     00000070000VL  Verlesung   20130806VTD
335324694    00142091           1307500003     00000070000VL  Verlesung   20130806VTD
335324695    00142091           1307500003     00000070000VL  Verlesung   20130806VTD
335325676    00142392           1304513410     00000070000RA  Rampe       20130806VTD
335325677    00142392           1304513410     00000070000RA  Rampe       20130806VTD
335326799    00132331           1308500002     00000002500VL  Verlesung   20130806VTD
335327197    00138403           1306513521     00000075000M3  SM 3. Stock 20130806VTD
335327198    00138403           1306513521     00000075000M3  SM 3. Stock 20130806VTD
335327199    00138403           1306513521     00000075000M3  SM 3. Stock 20130806VTD
335327316    00138667           1308500002     00000030000VL  Verlesung   20130806VTD
98LAGERD       13080500000000000000000014

Usw.

D.h. wenn ein Inhalt zwischen 01LAGERD und 98LAGERD steht, darf die Datei nicht gelöscht werden und soll unberührt bleiben. Nur wenn kein Inhalt dazwischen steht, wie im Code ganz oben zu sehen, soll die ganze Datei gelöscht werden.

Hat jemand vielleicht eine Idee ob das möglich ist und wenn ja wie man das anstellen kann?

Danke!

Content-Key: 218501

Url: https://administrator.de/contentid/218501

Printed on: April 25, 2024 at 15:04 o'clock

Member: bastla
bastla Oct 04, 2013 at 08:32:55 (UTC)
Goto Top
Hallo B-Real!

Würde es genügen, festzustellen, ob "98LAGERD" am Beginn der Zeile 2 steht? Wenn ja etwa so:
for /f "delims=:" %%i in ('findstr /bn "98LAGERD" "D:\Deine Datei.txt"') do if %%i==2 (echo leer & pause & goto :eof)
Grüße
bastla
Member: B-Real
B-Real Oct 04, 2013 at 08:42:19 (UTC)
Goto Top
Hi bastla,

ja das würde vollkommen reichen, denn wenn der Konverter "leere" Daten erstellt, befindet sich das 98LAGERD immer an der gleichen Stelle. Also in der 2. Zeile.

Für den findstr Befehl muss ich aber den direkten Dateinamen angeben und kann nicht mit Wildcards arbeiten, stimmts?

Danke dir schonmal.
Member: bastla
bastla Oct 04, 2013 at 10:51:24 (UTC)
Goto Top
Hallo B-Real!
Für den findstr Befehl muss ich aber den direkten Dateinamen angeben und kann nicht mit Wildcards arbeiten, stimmts?
In diesem Fall nicht - eine weitere Schleife sollte aber genügen:
for %%d in ("D:\Deine Datei*.txt") do for /f "delims=:" %%i in ('findstr /bn "98LAGERD" "%%d"') do if %%i==2 echo del "%%d"
Damit sollte das Löschen schon mal simuliert werden und wenn Du das "echo" entfernst auch tatsächlich stattfinden ...

Grüße
bastla
Member: B-Real
B-Real Oct 04, 2013 at 11:14:42 (UTC)
Goto Top
Auf dich ist echt Verlass, danke bastla. Damit klappt es perfekt und ist somit als gelöst markiert.

Gruß