Batch Kleines Skript

GermanGhettos

Lt. Commander
Registriert
Apr. 2011
Beiträge
1.102
Hallo,

ich kenne mit Batch nicht so gut aus und benötige ein kleines Skript.
In einer Log Datei (.txt) stehen z.B. Uhrzeit und IP Adresse in jeder Zeile.
z.B. so
8:33:12 xxx.xxx.xxx.xxx
8:34:13 xxx.xxx.xxx.xxx

Jetzt brauche ich eine Batch Datei, die die Uhrzeit und die IP Adresse ausliest und eine Textdatei erstellt,
wo drin steht, wie viele Zeilen in den letzten 3 Stunden erstellt wurden.
Idealerweise ohne doppelte IP.
z.B.

Zugriffe in den letzten 3 Stunden: xxx
Anzahl verschiedener IPs: xxx



Wäre echt cool, wenn da jemand was schreiben könnte :D


Gruß
G.G.
 
Wichtig zu wissen wäre, was für eine IP-Adresse das sein soll: eine des eigenen PCs oder die eines fremden Gerätes?

Wenn die Anzahl Zeilen in 3 Stunden nicht bekannt ist: Bei welcher Aktion soll das Script gestartet werden?

Falls die IP-Adresse dem Script als Argument übergeben wird, sollte das nur eine Zeile sein: (ungetestet)
Code:
echo %time% %1 > logdatei.log
 
Zuletzt bearbeitet:
Geht um ein internes Netzwerk mit Webserver :D
Um messen zu können, wann wie viele Zugriffe auf die Seite erfolgen, von der aus man dann theoretisch Updates ziehen kann.
Dabei wird eine Log Datei mit Uhrzeit und IP erstellt.
Können also unterschiedliche IP's sein.

Das Logfile existiert immer nur 1 Tag und ist dannach weg.
Also von 0 bis 23:59 Uhr.
Und jeder Zugriff wird halt geloggt.
Schön wäre es, wenn ich dann nach Lust und Laune die Batch aufrufen kann und mir die Batch eine .txt Datei erstellt,
wo einfach nur drin steht, wie viele Zugriffe in den letzten 3 Stunden erfolgten und wie viele "unterschiedliche" IP's es waren.
Das mit den IP's wäre die Kirsche auf der Sahne.


Edit: Logfile nich skript xD habs verbessert
 
Zuletzt bearbeitet:
Ich benutze IIS.
Und es werden durch IIS auch Logs erstellt ^^
Aber dazu brauche ich dann passend ein Batch Skript, was mir das eben ausgibt.
Klar ich könnte auch manuell alle Logs durchgehen und immer die Zeilen zählen,
aber dann muss man auch IP's vergleichen.
Dazu wäre eine Batch Datei gut.

Hab jetzt das ganze so weit und ein bisschen gegoogelt.
Set /A "Counter=0"
FOR /F "delims=:" %%A IN ('findstr /N .* "log.txt"') DO echo %%A Zugriffe > test.txt


Das geht schon mal soweit.
Er zählt die Zeilen und gibt dann aus, wie viele Zugriffe es gab.
Jetzt muss ich aber die Bedingung reinhauen, dass er es nur die letzten 3 Stunden macht.
Dafür muss er ja an der Uhrzeit eine Orientierung haben.
Nur wie das geht, weiß ich gar nicht.
 
Zuletzt bearbeitet:
Poste bitte mal einen kurzen Auszug aus dem Log, damit klar ist, wie eine Zeile aussieht und auf welche Zeichen man den Filter anwenden muss.
 
So sieht eine Zeile aus. (IP mit x weggestrichen)

2016-04-27 08:34:38 xx.xxx.xxx.xx GET /index/u0607g.xml.dif - 50 - xxx.xx.xxx.xxx *BYaBAAAA2aBAAQ_AAAQgsmcGrhjUyWd8tIGBPObRNnQsIASQAAAEAAIAA= 404 0 2 8
 
Zuletzt bearbeitet:
Bin mit Batch nicht weitergekommen, falls VBScript auch geht:
Code:
argcount = WScript.Arguments.Count
If argcount < 1 Then
	logfile = "log.txt"
Else
	logfile = WScript.Arguments(0)
End If

Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.OpenTextFile(logfile)
startdate = CDate(now())
counter = 0
while not oFile.AtEndOfStream
	line = oFile.ReadLine
	linedate = CDate(left(line,18))
	If DateDiff("s",linedate,startdate)<=10800 Then counter = counter + 1
Wend
oFile.Close
Wscript.Echo counter

Edit:
Hab das Script angepasst, wenn es unbedingt eine Batch-Datei sein muss, kann das gepostete Script auch in einer Batch-Datei aufgerufen werden:
Code:
cscript //Nologo script_for_console.vbs "log.txt"

Die Log-Datei ist entweder das erste Argument oder "log.txt".
 
Zuletzt bearbeitet:
Zurück
Oben