schulle2
Goto Top

Txt-Datei nach bestimmten Wert durchsuchen, wenn positiv, alles davorhängende löschen

Hallo zusammen,


ich bin grade auf der Suche nach einem Lösungsansatz, wie ich am besten ein kleines Problem von mir löse.
Ich hoff mir kann da jmd helfen:

Ich habe eine Log File log.txt a la:


12.05.2006

sfalhsdjfhasldncvdbcvljkcbnv1

13.05.2006

sfalhsdjfhasldncvdbcvljkcbnv2

15.05.2006

sfalhsdjfhasldncvdbcvljkcbnv3

16.05.2006

sfalhsdjfhasldncvdbcvljkcbnv4

17.05.2006

sfalhsdjfhasldncvdbcvljkcbnv4

Nun will ich per Batch oder VBS die File nach einem Datum (älter 2 Tage) durchsuchen.

Sprich am 17.05 führe ich das Script aus.
Das durchsucht die log, ob es einträge älter 15.05 gibt und löscht gegebenfalls diese.

Hat jmd eine Idee wie man das am betsen realisieren könnte?
Wäre für jede Hilfe sehr dankbar!

Content-Key: 54746

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

Printed on: April 27, 2024 at 03:04 o'clock

Member: miniversum
miniversum Mar 22, 2007 at 18:35:16 (UTC)
Goto Top
So gehts:
@echo off
set string="15.05."  
set "infile=datei.txt"  

FOR /F "delims=" %%i in ('find /n /i %string% %infile%') do set nummer=%%i  
set /a nummer=%nummer%-1
more +%nummer% %infile%>tempfile.txt
del %infile%
ren tempfile.txt %infile%

miniversum
Member: schulle2
schulle2 Mar 23, 2007 at 07:43:59 (UTC)
Goto Top
Super!
Vielen vielen Dank!
genau so geht es!
Member: schulle2
schulle2 Mar 23, 2007 at 09:54:42 (UTC)
Goto Top
kurze frage noch....
wenn das datum nicht vohanden ist, leert er das komplette dokument.
gibts da noch irgendwie n weg, wie ich das umgehen kann?
Member: miniversum
miniversum Mar 23, 2007 at 10:37:59 (UTC)
Goto Top
Hier hab ich diesen Fehler abgefangen (unggetestet):
@echo off
set string="15.05."  
set "infile=datei.txt"  

FOR /F "delims=" %%i in ('find /n /i %string% %infile%') do set nummer=%%i  
if "%nummer:~0,5%" equ "-----" (  
echo %string% nicht in "%infile%" vorhanden  
pause
) else (
set /a nummer=%nummer%-1
more +%nummer% %infile%>tempfile.txt
del %infile%
ren tempfile.txt %infile%
)

miniversum
Member: Biber
Biber Mar 23, 2007 at 10:48:33 (UTC)
Goto Top
Moin,

nur kleine Korrektur eines Flüchtigkeitsfehlers:
Ändere: if "%nummer:0,5%"="-----"
in: if "%nummer:0,5%"=="-----"

"IF"-Prüfung auf Gleichheit im CMD-Interpreter mit doppeltem Gleichheitszeichen,
Zuweisung eines Wertes mit SET und einfachem Gleichheitszeichen.

[Ansonsten denke ich, der Beitrag kann auf "Gelöst" gesetzt werden?]

Grüsse
Biber
Member: schulle2
schulle2 Mar 26, 2007 at 11:44:02 (UTC)
Goto Top
dank euch!


ich habe das script nun noch ein wenig erweitert.
In meinen Logfiles wird das Datum nach dem Schema gespeichert:

20-MÄR-2007

Alles schön und gut. Es läuft, ... Nur nicht beim Monat März wegen dem Sonderzeichen "Ä".
Ich habs schon mit zigg verschiedenen Möglichkeiten probiert, jedoch nichts gescheites gefunden.
Könntet ihr mir vielleicht da bitte nochmal helfen? ;)


@echo OFF
set jahr=%date:~-4%
set monat=%date:~-7,2%
set tag=%date:~-10,2%


if %monat%==01 set monat=Nov
if %monat%==02 set monat=Dez
if %monat%==03 set monat=Jan
if %monat%==04 set monat=Feb
if %monat%==05 set monat=Mär
if %monat%==06 set monat=Apr
if %monat%==07 set monat=Mai
if %monat%==08 set monat=Jun
if %monat%==09 set monat=Jul
if %monat%==10 set monat=Aug
if %monat%==11 set monat=Sep
if %monat%==12 set monat=Okt

echo %tag%.%monat%.%jahr%


set suchstring=%tag%.%monat%.%jahr%
set "infile=listener_all.LOG"

FOR /F "delims=" %%i in ('find /n /i %suchstring% %infile%') do set zeile=%%i
if "%zeile:~0,5%" == "-----" (
echo %suchstring% nicht in "%infile%" vorhanden

) else (
set /a zeile=%zeile%-1
more +%zeile% %infile%>tempfile.txt
del %infile%
ren tempfile.txt %infile%
)
Member: Biber
Biber Mar 26, 2007 at 11:53:40 (UTC)
Goto Top
Moin schulle2,

dazu musst Du unter Windows-GUI-Krams (z.B. Explorer) und dem Batch die gleichen Codepages sicherstellen.

"Windows" verwendet hier (wo datt Forum steht) die Codepage 1252; die CMD.exe verwendet meistens die Codepage 850 oder 437.

Überprüfen am Cmd-Prompt mit dem Befehl CHCP (==Change Codepage).

Einstellen einer anderen Codepage am Prompt/im Batch mit "CHCP 1252" oder CHCP "850" BEVOR irgendetwas mit Umlauten gelesen oder in Dateien geschrieben wird.

Unter "Umlaut CHCP Batch" sollte hier im Forum etwas darüber zu finden sein.

Gruss Biber
Member: schulle2
schulle2 Mar 26, 2007 at 12:03:35 (UTC)
Goto Top
danke für deine antwort.


es geht ;)