[Batch] recuperer ping dans fichier txt

recuperer ping dans fichier txt [Batch] - Shell/Batch - Programmation

Marsh Posté le 29-04-2012 à 21:30:42    

Salut,
 
afin de réaliser un graphique MRTG concernant le ping d'une machine, je lance la commande ping à l'aide d'un batch et je souhaite récupérer le ping moyen et les paquets perdus dans un fichier texte.
 
le résultat du ping ressemble à cela ( en gras les valeurs que je voudrai récupérer )
 

Code :
  1. Envoi d'une requête 'ping' sur free.fr [212.27.48.10] avec 32 octets de données
  2. :
  3. Réponse de 212.27.48.10 : octets=32 temps=46 ms TTL=123
  4. Réponse de 212.27.48.10 : octets=32 temps=57 ms TTL=123
  5. Réponse de 212.27.48.10 : octets=32 temps=43 ms TTL=123
  6. Réponse de 212.27.48.10 : octets=32 temps=30 ms TTL=123
  7. Statistiques Ping pour 212.27.48.10:
  8.     Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
  9. Durée approximative des boucles en millisecondes :
  10.     Minimum = 30ms, Maximum = 57ms, Moyenne = 44ms


mon fichier batch :

Code :
  1. @ECHO off
  2. ping -n 4 free.fr 1>result.txt
  3. @For /F "tokens=10 delims=<=ms' " %%D in ('FIND "Moyenne" C:\divers\mrtg\bin\ping\result.txt') Do @Set /A delay=%%D
  4. @For /F "tokens=7 delims=<=' " %%D in ('FIND "perdus" C:\divers\mrtg\bin\ping\result.txt') Do @Set /A loss=%%D
  5. @ECHO %delay% 1>C:\divers\mrtg\bin\ping\output.txt
  6. @ECHO %loss% 1>>C:\divers\mrtg\bin\ping\output.txt


biensur ce ne marche pas mais je suis sur que je ne suis pas tres loin d'avoir trouvé, mais avec les t okens etc j'ai du mal à comprendre.
Merci par avance de votre aide.

Reply

Marsh Posté le 29-04-2012 à 21:30:42   

Reply

Marsh Posté le 30-04-2012 à 10:15:35    

Ce genre de problème se résout relativement facilement en VBS. Voir http://technet.microsoft.com/library/ee156605.aspx
 
Par exemple, avec le bout de code suivant que l'on copie/colle dans un simple fichier texte à qui l'on donne un nom qui se termine par ".vbs", et que l'on exécute en cliquant de dessus dans l'explorateur Windows ou en le mettant en paramètre de cscript.exe :

Code :
  1. Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject" )
  2. Set objShell = Wscript.CreateObject("Wscript.Shell" )
  3. objName = objFSO.GetTempName
  4. objTempFile = objName
  5. objShell.Run "cmd /c ping -n 3 -w 1000 212.27.48.10 >" & objTempFile, 0, True
  6. Set objTextFile = objFSO.OpenTextFile(objTempFile, 1)
  7. Do While objTextFile.AtEndOfStream <> True
  8.     strText = objTextFile.ReadLine
  9.     If Instr(strText, "Réponse" ) > 0 Then
  10.         Wscript.Echo "Réponse reçue."
  11.         Exit Do
  12.     End If
  13. Loop
  14. objTextFile.Close
  15. objFSO.DeleteFile(objTempFile)


Message édité par olivthill le 30-04-2012 à 10:16:33
Reply

Marsh Posté le 30-04-2012 à 18:24:25    

Salut,
après m’être inspiré de ton exemple et après quelques recherches sur le net, j'ai réussi à faire ce que je voulais.
Si jamais sur un malentendu, ça intéresse quelqu'un, voici ce que ça donne ( y a surement moyen d'optimiser, mais ça marche plutôt bien )
 

Code :
  1. Set objFSO = Wscript.CreateObject("Scripting.FileSystemObject" )
  2.     Set objShell = Wscript.CreateObject("Wscript.Shell" )
  3.     objName = objFSO.GetTempName
  4.     objTempFile = objName
  5.     objShell.Run "cmd /c ping -n 4 -w 1000 free.fr >" & objTempFile, 0, True
  6.     Set objTextFile = objFSO.OpenTextFile(objTempFile, 1)
  7.     Do While objTextFile.AtEndOfStream <> True
  8.         strText = objTextFile.ReadLine
  9. objPos1 = inStr(strText,"perte" )
  10. if objPos1 > 1 Then
  11.  longueur = Len(strText)
  12.  GetLost = Right(strText, longueur - objPos1 - 5)
  13.  longueur = Len(GetLost)
  14.  GetLost = Left(GetLost, longueur - 3)
  15.  'MsgBox "Lost: " & GetLost
  16. End If
  17. objPos2 = inStr(strText,"Moyenne" )
  18. if objPos2 > 1 Then
  19.  longueur = Len(strText)
  20.  GetPing = Right(strText, longueur - objPos2 - 9)
  21.  GetPing = Left(GetPing, longueur - objPos2 - 11)
  22.  'MsgBox "Ping: " & GetPing
  23.  WScript.Echo GetPing
  24.  WScript.Echo Getlost
  25.  WScript.Echo "Ping Ms"
  26.  WScript.Echo "lost %"
  27.  Exit Do
  28. End If
  29.     Loop
  30.     objTextFile.Close
  31.     objFSO.DeleteFile(objTempFile)

Reply

Marsh Posté le 13-05-2012 à 02:16:20    

Salut,
 
ce que tu demandais mais en batch:
 

Code :
  1. setlocal enabledelayedexpansion
  2. set fi=test.txt
  3. for /f "tokens=1-10" %%i in ('ping 212.27.48.10') do (
  4.    if "%%p"=="perdus" echo perte=%%r>>%fi%
  5.    if "%%o"=="Moyenne" (
  6.       set var=%%q
  7.       echo moyenne=!var:ms=!>>%fi%
  8.    )
  9. )

Message cité 1 fois
Message édité par Kriki le 13-05-2012 à 02:17:09
Reply

Marsh Posté le 27-10-2013 à 13:16:25    

Kriki a écrit :

Salut,
 
ce que tu demandais mais en batch:
 

Code :
  1. setlocal enabledelayedexpansion
  2. set fi=test.txt
  3. for /f "tokens=1-10" %%i in ('ping 212.27.48.10') do (
  4.    if "%%p"=="perdus" echo perte=%%r>>%fi%
  5.    if "%%o"=="Moyenne" (
  6.       set var=%%q
  7.       echo moyenne=!var:ms=!>>%fi%
  8.    )
  9. )



 
Bonjour,
 
Je sais que ce post date d'il y a longtemps mais serait-il possible de m'expliquer comment ce code fonctionne car j'ai beau essayer de comprendre j'y ai du mal ?
 
Par exemple à quoi correspond le %%r et %%p ? Car si on change ces variables ce script ne fonctionne plus.
 
Merci d'avance.
 


Message édité par sotayri le 27-10-2013 à 14:24:44
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed