Entwickler-Ecke

Off Topic - Batch Datei zum Logging von Ping


avoid - Mi 18.06.14 20:22
Titel: Batch Datei zum Logging von Ping
Ich hab mir mit Hilfe einiger Forumsbeiträge eine kleine Batch Datei erstellt.
Leider verstehe ich davon nicht genug um zu verstehen warum ich in die Textdatei sowohl die OK als auch die Fehler geschrieben bekomme aber in der Liveanzeige sehe ich nur die OK Meldungen.
Dort hätte ich auch gerne die Fehler gesehen.

Liegt das evtl. daran das die for schleife nur bei OK verlassen wird?


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
@echo off
set ip=192.168.178.1
set logdatei=c:\test.txt

:start
 set Erfolg=Fehler
 for /f "tokens=7 delims==< " %%i in ('ping -n 1 %IP%^|findstr "TTL"') do set "Zeit= - %%i" && set "Erfolg=OK"
 >>%logdatei% echo %IP% - %date%-%time% - %Erfolg%%Zeit%
 cls
 @echo Ping zur IP %IP% gestartet.
 @echo Aufzeichnung nach %logdatei% aktiv.
 @echo Zum beenden Strg+C verwenden.
 @echo -------------------------------------------
 @echo %date%-%time% - %Erfolg%%Zeit%
 @echo:
goto start


evtl. hat jemand ne Idee.
schon mal danke.


avoid - Do 19.06.14 11:01

mir ist gerade noch etwas eingefallen.

lässt sich evtl. der Dateiname so ändern das dass Datum mit drin steht?
damit um Mitternacht automatisch eine neue Datei erstellt wird?


Th69 - Do 19.06.14 11:41

Zu deiner letzten Frage:

Quelltext
1:
2:
3:
4:
5:
set logdatei=c:\test
set logextension=.txt

// weiter unten
>>%logdatei%_%date%%logextension%


Narses - Do 19.06.14 12:11

Moin!

Wenn ich was in max. 5 min. nicht in cmd nicht hinkriege, nehme ich normalerweise Perl... :zwinker: Warum sich mit MS-Syntax rumquälen... :?

Aber ich verstehe dein Problem nicht, bei mir funktioniert´s:
Screenshot
(Das kann aber auch daran liegen, dass dieses Subnet bei mir nicht erreichbar ist. ;) Hab jetzt allerdings auch keine Zeit/Lust zu suchen... hab eh nicht verstanden, was das werden soll?)

Ich habe deine Syntax auch etwas überarbeitet (so hätte ich das nicht geschrieben):

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
@echo off
set ip=192.168.178.1
set logdatei=c:\test.log

:start
 set Erfolg=Fehler
 for /f "tokens=7 delims==< " %%i in ('ping -n 1 %IP%^|findstr "TTL"') do set Zeit=" - %%i" && set Erfolg=OK
 echo %IP% - %date%-%time% - %Erfolg%%Zeit% >>%logdatei%
 cls
 echo Ping zur IP %IP% gestartet.
 echo Aufzeichnung nach %logdatei% aktiv.
 echo Zum beenden Strg+C verwenden.
 echo -------------------------------------------
 echo %date%-%time% - %Erfolg%%Zeit%
 echo:
goto start


Und noch zu deinen Fragen:
user profile iconavoid hat folgendes geschrieben Zum zitierten Posting springen:
Liegt das evtl. daran das die for schleife nur bei OK verlassen wird?
Die For-Schleife wird bei jedem Aufruf der Kette ping|findstr verlassen, da sie die Ausgabe analysieren soll (ist etwas gewöhnungsbedürftig).

Und noch zum Verständnis: IMHO sind deine set-Statements im do-Zweig syntaktisch falsch (s.o.). Weiterhin bezieht sich die Prüfung von "&&" auf den RC der letzten Anweisung: also das 1. set vor dem 2. set: wenn das OK war, wird das zweite set ausgeführt. :idea:

cu
Narses


avoid - Do 19.06.14 17:47

danke für eure hinweise und Infos.
so klappt es besser, und jetzt kann ich auch nach vollziehen was da passiert.

was die frage an geht, wozu ich so etwas brauche ...
hab einen Windows 8.1 Rechner der auf der onboard Netzwerkkarte immer mal wieder den betrieb einstellt.
ich will mit der Batchdatei die nächsten tage mal mit loggen wann die Verbindung verschwindet
und dann mit den Systemereignissen vergleichen.

Am Treiber liegt's nicht und an der Hardware auch nicht weil eine gesteckte Karte diese Probleme nicht macht.
mal sehen ob das nur zu bestimmten Zeiten vor kommt.

danke auf jeden fall.


----nachtrag----

Narses in dem von dir geposteten Code ist aber auch ein Syntaxfehler. ;)

Richtig: "Zeit= - %%i"
Falsch: Zeit=" - %%i"

wenn man das " hinter das = setzt wie bei dir,
bekommt man in anzeige und log ein " hinter den Inhalt von %Erfolg%
und auch hinter den Inhalt von %Zeit%.
das ist optisch eher unschön.

ich hab es jetzt so:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
@echo off
set ip=192.168.178.1
set logdatei=c:\test
set logextension=.txt

:start
 set Erfolg=Fehler
 for /f "tokens=7 delims==< " %%i in ('ping -n 1 %IP%^|findstr "TTL"') do set "Zeit= - %%i" && set Erfolg=OK
 echo %IP% - %date%-%time% - %Erfolg%%Zeit% >>%logdatei%_%date%%logextension%
 cls
 echo Ping zur IP %IP% gestartet.
 echo Aufzeichnung nach %logdatei% aktiv.
 echo Zum beenden Strg+C verwenden.
 echo -------------------------------------------
 echo %date%-%time% - %Erfolg%%Zeit%
 echo:
 IF "%Erfolg%" == "Fehler" (
  echo 
 )
goto start


hab auch noch nen beep bei Fehler rein gemacht.
hinter dem letzten echo muss das ASCII Zeichen für BEL sitzen (ALT + 7), das macht dann den denn Beep.

Gruß.