moltova
Goto Top

Inhalt einer Datei per batch vergleichen und aktion ausführen

Hi,

da mein Kopf gerade total raucht, dachte ich, ich wende mich vertrauensvoll an Euch face-smile

Mein Problem (Denkblockade oder wie auch immer)

Ich habe einen Skript geschrieben,der die HTML Daten des Webinterfaces meines Routers herunterlädt und die Zeile filter, wo die aktuelle IP Adresse des ISP angezeigt wird. Diese IP Adresse wird danach in ein TXT File geschrieben. Danach wird per skript der Inhalt dieses TXT Files per Email versendet. Soweit kalppt das perfekt. Habe das ganze auf meinem HomeServer per Aufgabenplaner am laufen und dieser sendet schön brav alle 2 Stunden die aktuelle IP des Routers.

Jetzt möchte ich aber, das der Skript erst in den Emailabschnitt springt, wenn sich die IP Adresse geändert hat.

Wie kann ich das abfragen? Habe schon versucht mit 2 TXT Daten zu Arbeiten aber jetzt bin ich gerade an einem Punkt wo mir absolut der Kopf raucht?!?!?!?!


Hier mein Skript damit Ihr Euch das besser Vorstellen könnt.

wget --mirror -k -E http://192.168.0.254/

findstr /I "wan_ip=" "192.168.0.254\index.html">"aktuelle_ip.txt"  

Blat -install test@test.de test@test.de
Blat "aktuelle_ip.txt" -to test@test.de -server mail.gmx.net -u test@test.de -pw test@test.de -debug -timestamp -log blatSMTPlog.txt -subject "aktuelle Router IP"  


Das ganze läuft schön als cmd


Vielen Dank

Matthias

NACHTRAG: wie erzeugt man hier im Forum dieses Fenster für Codeschnipsel für Programmierungen etc?!

Nachtrag 2: die Frage aus "Nachtrag" klappt ja schoneinmal

Content-ID: 187064

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

Ausgedruckt am: 22.11.2024 um 03:11 Uhr

ITLogger
ITLogger 26.06.2012 um 11:52:52 Uhr
Goto Top
Direkt mit Code kann ich Dir nicht helfen. Aber mit einer generellen Idee, denn Dateien auslesen und schreiben kannst Du ja:

Schreibe die aktuelle IP z.B. in zwei Textdateien: aktuelle_ip.txt und letzte_ip.txt. Nur wenn sich diese unterschen fürst Du die Mail Aktion aus. Grundgerüst:

1 Webseite auslesen
2 Findstr ausführen -> IP in aktuelle IP schreiben und zusätzlich in Variable %IP%
3 Letzte_ip.txt auslesen und mit aktueller %IP% vergleichen, wenn gleich, dann Ende, wenn unterschiedlich dann folgende Schritte
4 aktuelle IP in letzte_ip.txt schreiben
5 Mail versenden
pieh-ejdsch
pieh-ejdsch 26.06.2012 um 15:01:51 Uhr
Goto Top
moin Matthias,

Deine AusleseZeile könnte so aussehen:
(for /f delims^= %%i in ('findstr /i "wan_ip=" "192.168.0.254\index.html" ^|findstr /vg:"aktuelle_ip.txt" ') do @echo %%i>"aktuelle_ip.txt" ) || exit /b 0  

Nachtrag:
Die Codeschnipsel erzeugst Du mit
<code>Codezeilen</code>
auch nachzulesen in der Formatierungshilfe in den FAQ

Gruß Phil
moltova
moltova 26.06.2012 um 15:24:27 Uhr
Goto Top
OK, Danke, werde das heute Abend mal testen und melde mich dann wieder face-smile
moltova
moltova 26.06.2012 aktualisiert um 17:15:57 Uhr
Goto Top
Ok hab jetzt noch ein paar versuche Unternommen.... klappt aber irgendwie nicht so wie ich mir das Denke.
Das ist mein aktueller Code:

goto kopieren

:kopieren
wget --mirror -k -E http://192.168.0.8/
goto auslesen

:auslesen
findstr /I "wan_ip=" "192.168.0.8\index.html">"aktuelle_ip.txt"  
goto vergleichen

:vergleichen
(for /f delims^= %%i in ('findstr /i "wan_ip=" "192.168.0.8\index.html" ^|findstr /vg:"aktuelle_ip.txt" ') do @echo %%i>"aktuelle_ip.txt" )  
if not errorlevel 1 goto mail
if errorlevel 1 goto ende


:mail
Blat -install 
Blat "aktuelle_ip.txt" -to  -server mail.gmx.net -u  -debug -timestamp -log blatSMTPlog.txt -subject "aktuelle Router IP"  
goto ende

:ende
pause
exit

hab im mail Block nur meine Passwörter ec entfernt face-smile also nicht wundern das der ein wenig anders aussieht

Achso, so sieht die Zeile aus, die er suchen und vergleichen soll

var wan_ip='88.79.158.135';
pieh-ejdsch
pieh-ejdsch 26.06.2012 um 21:47:59 Uhr
Goto Top
hallo Matthias,

goto Marke und danach die Zeile :Marke ist verschwendeter Platz in dem Batch.

Die von mir hingeschriebene Zeile ist als Ersatz für die Zeile 04 in Deinem StartBeitrag gedacht.
Wenn Du jetzt die "Aktuelle_IP.TXT" schon vorher veränderst, wird die von mir geschriebene Zeile nicht Funktionieren. Sie wird ja von der Forschleife Verändert (die "aktuelle_ip.txt") bei unterschieden.
Den Errorlevel der ('Anweisung') in der Forschleife kannst Du nicht Auslesen, weil diese in einem Seperaten CMD-kontex ausgeführt wird.

So war es gedacht, mit Klammer und wenn Gleich dann Batchende:
wget --mirror -k -E http://192.168.0.254/

(for /f delims^= %%i in ('findstr /i "wan_ip=" "192.168.0.254\index.html" ^|findstr /vg:"aktuelle_ip.txt" ') do @echo %%i>"aktuelle_ip.txt" ) || exit /b 0  

Blat -install test@test.de test@test.de
Blat "aktuelle_ip.txt" -to test@test.de -server mail.gmx.net -u test@test.de -pw test@test.de -debug -timestamp -log blatSMTPlog.txt -subject "aktuelle Router IP"  


Gruß Phil
moltova
moltova 26.06.2012 um 22:20:42 Uhr
Goto Top
Danke für Deine Hilfe, manchmal sieht man den Wald vor lauter Bäumen nicht mehr. Ok habe den Skript nach Deinem Vorschlag angepasst. Leider versendet er immer noch Emails, er sendet wenn ich den Router Neu verbunden habe und eine Neue IP habe und er sendet auch bei allen weiteren Tests danach obwohl die IP Adresse im Skript und der txt gleich geblieben sind.


wo ist der Fehler?

mfg Mathes
moltova
moltova 27.06.2012 um 15:45:51 Uhr
Goto Top
So habe es jetzt durch folgende Zeile gelöst:

fc /L /N "aktuelle_ip.txt" "alte_ip.txt"
if errorlevel 1 goto mail
goto ende

habe noch eine 2te TXT eingebaut, wo nach dem versenden der eMail die aktuelle IP in die txt Datei "alte_Ip.txt" geschrieben wird.

so funktioniert alles prima face-smile

Danke für die Hilfen