barkingdog
Goto Top

Telefonliste mit Batch überwachen

Hallo miteinander,
bei der Suche nach einer Möglichkeit mein Problem zu lösen bin ich auf dieses Forum aufmerksam geworden.
Mein Problem ist folgendes, es geht um die Auswertung einer .txt datei, in welcher eingehende Anrufe gespeichert werden.
Gegenwärtig ist es so, dass sobald sich in dieser .txt etwas ändert ich eine Email erhalte, allerdings sind nicht alle eingehenden Anrufe
für mich und deswegen will ich einen Filter drüber laufen lassen der eine seperate .txt erstellt in welcher nur Anrufe für mich gespeichert werden.

Hier mal ein Beispieleintrag:
01.12.2008,09:46:01,[b]100[/b], +49 (9999) 998877, ja,ein, 9, 100, 100
01.12.2008,09:46:12,122 , +49 (9999) 998877, ja,ein, 9, 122, 122

So meine Durchwahl ist die 100, die bat, soll jetzt immer die letzte Zeile auf die Durchwahl hin prüfen und die Zeile in eine extra .txt zu schreiben.

Fragen:

-ist es möglich eine geschriebene .bat Datei alle 10 min. .txt prüfen zu lassen

Ich kenne mich mit dem Schreiben einer Stapelverarbeitung nicht so gut aus, ich habe mir ein paar Sachen selber zusammengesucht, allerdings verstehe ich da nicht alles.


@echo off & setlocal enabledelayedexpansion
set "CTILOG=D:\CTILOG.TXT" Anruferliste wird von der Telefonanlage geschrieben
set "Anrufe=D:\ANRUFE.TXT"
Datei in die Anrufe für mich geschrieben werden sollen
for /f "tokens=1,2,3,4 delims=" %%a in ('find "100" %CTILOG%') do @set vari=%%a // Schleife die den String nach meiner Durchwahl durchsucht und dann in Variable vari speichert (?)


Jetzt weiss ich nicht mehr wie es weitergeht, würde mich über jede Hilfe freuen danke.

Content-ID: 103756

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

Ausgedruckt am: 26.11.2024 um 18:11 Uhr

bastla
bastla 10.12.2008 um 15:01:18 Uhr
Goto Top
Hallo barkingdog und willkommen im Forum!

Was genau soll denn in Deiner "ANRUFE.TXT" stehen?

Falls Du nur aus der "CTILOG.TXT" alle Deine Durchwahl betreffenden Anrufe filtern willst, sollte doch
findstr /c:",100 " C:\CTILOG.TXT > D:\ANRUFE.TXT
genügen. Durch die Verwendung der Umleitung mit ">" wird bei jedem Batchdurchlauf die gefilterte Datei neu erstellt.

Wenn Du "sleep.exe" aus den Windows Server 2003 Resource Kit Tools zur Verfügung hast, könntest Du den Batch in einer Endlosschleife laufen lassen:
@echo off & setlocal
:Loop
findstr /c:",100 " C:\CTILOG.TXT > D:\ANRUFE.TXT  
sleep 600
goto :Loop
Grüße
bastla
barkingdog
barkingdog 10.12.2008 um 16:09:30 Uhr
Goto Top
Eigentlich soll in der anrufe.txt die Zeile aus der CTILOG.txt ohne die beiden letzten Ziffern, die sind bei findstr nicht relevant. Jetzt weiß ich allerdings nicht ob das möglich ist.

Zum Ressource Kit Tool dass brauche nur installieren oder muss ich da noch was einstellen.

So sieht meine momentane Fassung aus:

@echo off & setlocal
:Loop
for /F "tokens=1-5 delims=," %%a in ('find "111" D:\CTILOG.TXT^') do @set vari=%%a
echo %Vari%>C:\neu.txt
sleep 600
goto :Loop


Das von dir gepostete hat bei mir nur eine leere Anrufe.txt erstellt. Wenn ich nur die ersten 5 Tokens haben will funktioniert das bei mir auch nicht, habe auch schon andere Schreibweisen benutzt leider mit dem gleichen Ergebnis.

for /F "tokens=1,2,3,4,5 delims=," %%a in ('find "111" D:\CTILOG.TXT^') do @set vari=%%a


Danke schon mal für deine Hilfe.
bastla
bastla 10.12.2008 um 16:45:45 Uhr
Goto Top
Hallo barkingdog!

Zum Ressource Kit Tool dass brauche nur installieren oder muss ich da noch was einstellen.
Nach der Installation sollte der Programmordner (defaultmäßig: "C:\Programme\Windows Resource Kits\Tools") automatisch in die Variable %PATH% übernommen worden sein - dann stehen alle enthaltenen Programm im Batch zur Verfügung.

Alternativen wären
- die manuelle Ergänzung der "PATH"-Systemvariable über "Systemeigenschaften / Erweitert / Umgebungsvariablen / Systemvariablen" oder
- die Angabe des Pfades zur "sleep.exe" im Batch.
Eigentlich soll in der anrufe.txt die Zeile aus der CTILOG.txt ohne die beiden letzten Ziffern
Mit "Ziffern" sind hier vermutlich "Zahlen" gemeint - dann so:
@echo off & setlocal
set "Anrufe=D:\ANRUFE.TXT"  
set "CTILOG=D:\CTILOG.TXT"  

:Loop
if exist "%Anrufe%" del "%Anrufe%"  
for /f "tokens=1-5 delims=," %%a in ('findstr /c:",100 " "%CTILOG%"') do >>"%Anrufe%" echo %%a,%%b,%%c,%%d,%%e  
sleep 600
goto :Loop
Die Schreibweise des Suchstrings mit ",100 " sollte dafür sorgen, dass nicht unbeabsichtigt auch Zeilen, in welchen die Nummer des Anrufers "100" enthält, erfasst werden.

Dass mein Ansatz oben kein Ergebnis brachte, könnte daran liegen, dass sich das Leerzeichen nicht nach "100", sondern zwischen "," und "100" befindet (auch, wenn es in Deinem "Beispieleintrag" anders aussieht). Damit das beim Posten von weiteren Beispieldaten (und auch von Batchen) nicht mehr passiert, solltest Du dafür ""-Formatierung (ich bevorzuge für Daten "plain") verwenden.
Dein Batch hat aus meiner Sicht einen Nachteil: Es wird nur jeweils der letzte Anruf erfasst - falls es innerhalb der 10 Minuten "sleep"-Zeit mehrere gewesen sein sollten, wäre das nicht zu erkennen.

Grüße
bastla
barkingdog
barkingdog 10.12.2008 um 16:55:24 Uhr
Goto Top
Ja mit Ziffern hatte ich Zahlen gemeint, da hatte ich mich unklar ausgedrückt.

Habe heute irgendwie keinen Kopf für solche Sachen, da hast du schon recht dass meine Batch einen Nachteil hat. Hm die Batch jede Sekunde durchlaufen zu lassen wäre wohl übertrieben, von daher lieber umschreiben.

Danke für die Anleitung mit der "Code"-Formatierung. Ich hatte es anfangs mit [code][/code] probiert.

Weiss nicht ob ich heute noch die Zeit finde es auszuprobieren wenn nich werde ich mich morgen nochmal damit auseinander setzen. Danke für deine Hilfe.
bastla
bastla 10.12.2008 um 17:05:45 Uhr
Goto Top
Hallo barkingdog!

Vielleicht noch als Denkansatz (für morgen face-wink): Du könntest eine Aufteilung vornehmen in "Anrufe_alt.txt" und "Anrufe_neu.txt". Bei jedem Batchdurchlauf wären alle in "CTILOG.TXT" enthaltenen relevanten Zeilen darauf hin zu überprüfen, ob sie bereits in einer der beiden Dateien enthalten sind - wenn nicht, dann an "Anrufe_neu.txt" anfügen.

Die "neuen" Anrufe könntest Du mit einem weiteren Batch zu "alten" machen, indem Du sie an "Anrufe_alt.txt" anfügst und "Anrufe_neu.txt" löschst (bzw leerst). Dieser Batch wäre nach Bedarf manuell aufzurufen.

Grüße
bastla
barkingdog
barkingdog 11.12.2008 um 10:52:50 Uhr
Goto Top
Zitat von @bastla:
Hallo barkingdog!
[...]
@echo off & setlocal
> set "Anrufe=D:\ANRUFE.TXT"  
> set "CTILOG=D:\CTILOG.TXT"  
> 
> :Loop
> if exist "%Anrufe%" del "%Anrufe%"  
> for /f "tokens=1-5 delims=," %%a in ('findstr  
> /c:",100 " "%CTILOG%"') do  
> >>"%Anrufe%" echo %%a,%%b,%%c,%%d,%%e  
> sleep 600
> goto :Loop
> 
[...]
Dein Batch hat aus meiner Sicht einen Nachteil: Es wird nur jeweils
der letzte Anruf erfasst - falls es innerhalb der 10 Minuten
"sleep"-Zeit mehrere gewesen sein sollten, wäre das
nicht zu erkennen.

Grüße
bastla


Hallo bastla,

also mit dem was du da geschrieben hast bekomme ich leider kein Ergebnis und den Fehler finde ich auch nicht. Ich kenne mich nun wirklich nicht aus, aber eigentlich sieht es für richtig aus und daher weiss ich jetzt auch nicht wo ich da ansetzen muss.
bastla
bastla 11.12.2008 um 14:27:53 Uhr
Goto Top
Hallo barkingdog!

Wies sieht denn nun tatsächlich eine Zeile der "CTILOG.TXT" aus? Derzeit wird nach
,100 
(mit einem Leerzeichen nach "100") gesucht - falls, wie oben schon angesprochen, dieses Leerzeichen eigentlich zwischen dem Komma und der Zahl 100 stehen müsste, kann natürlich nichts gefunden werden ...

Grüße
bastla
barkingdog
barkingdog 11.12.2008 um 15:12:06 Uhr
Goto Top
Hallo bastla!

Ja es wird nach ,[Leerzeichen]100 gesucht. So der Fehler ist behoben jetzt werde ich es mal testen. Entschuldige bitte, wenn ich deine Nerven vielleicht etwas überstrapaziert haben sollte ;)

Edit

Kann ich mit "findstr" auch nach mehreren Sachen auf einmal suchen ?

for /f "tokens=1-10 delims=," %%a in ('findstr /c:", 100.*,ein" "%CTILOG%"')  

So dass ich nach der Rufnummer 100 suchen kann und ob in der Zeile auch ein steht. Ich habe die Metazeichen "." und "*" probiert aber es gibt kein Ergebnis. Ich hatte gedacht dass .* eine beliebige Folge von Zeichen darstellt oder liege ich damit falsch ?

Edit

^^Wenn Sie nach mehreren verschiedenen Suchausdrücken in einer Dateimenge suchen möchten, erstellen Sie eine Textdatei, in der jedes >Suchkriterium auf einer neuen Zeile aufgeführt ist. Sie können auch eine zweite Datei erstellen, die eine Liste der zu durchsuchenden >Dateien enthält. Um die Suchkriterien in der Datei Suchdat.txt zum Durchsuchen der Dateien in Dateilst.txt zu verwenden und anschließend die >Resultate in die Datei Resultat.aus zu schreiben, geben Sie Folgendes ein:
findstr /g:suchdat.txt /f:dateilst.txt > resultat.aus


Quelle: Microsoft

Dass habe ich dazu gefunden, doch habe ich das Problem dasss es momentan an der Umsetzung hapert. Wenn ich das richtig verstanden habe,
schreibe ich eine der .txt Dateien die Suchkritieren rein und die andere ist die zu durchsuchende. Mir stellt sich jetzt bloss die Frage wie
ich die Suchkritieren da rein schreiben muss.
bastla
bastla 11.12.2008 um 16:27:08 Uhr
Goto Top
Hallo barkingdog!

Mach es doch einfach so:
for /f "tokens=1-10 delims=," %%a in ('findstr /c:", 100" "%CTILOG%"^|findstr /c:",ein"') do
Damit werden zunächst alle Zeilen, welche ", 100" enthalten, herausgefiltert. Dieses Zwischenergebnis wird dann nochmals (auf das Vorhandensein von ",ein") untersucht.

Grüße
bastla
barkingdog
barkingdog 12.12.2008 um 10:15:03 Uhr
Goto Top
Hallo bastla!

Ich wollte dir nochmals danken für deine Hilfe, es läuft jetzt so wie ich mir das vorgestellt habe. Wirklich schön was man mit so einfachen Mitteln umsetzen kann.

Grüße
barkingdog
barkingdog
barkingdog 19.01.2009 um 14:15:40 Uhr
Goto Top