Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
532 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Batch] recuperer ping dans fichier txt

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Batch] recuperer ping dans fichier txt

n°2139705
Empereur78
On s'en fout !
Posté le 29-04-2012 à 21:30:42  profilanswer
 

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.

mood
Publicité
Posté le 29-04-2012 à 21:30:42  profilanswer
 

n°2139729
olivthill
Posté le 30-04-2012 à 10:15:35  profilanswer
 

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
n°2139823
Empereur78
On s'en fout !
Posté le 30-04-2012 à 18:24:25  profilanswer
 

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)

n°2142151
Kriki
Posté le 13-05-2012 à 02:16:20  profilanswer
 

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
n°2208323
sotayri
Posté le 27-10-2013 à 13:16:25  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  [Batch] recuperer ping dans fichier txt

 

Sujets relatifs
Ouvrir un fichier en CQuestion sur lecture fichier
Batch et FORTraitement de fichier avec python !
Générer une image à partir d'un fichier htmlrécupérer le nom d'un fichier ouvert par Scilab et fonction uigetfile
Stockage des données d'un formulaire php dans un fichier csvModifier le fichier xml avec un feuille XSLT
[Batch Dos ou Powershell ]Récupérer un dossier FTP puis le purger? 
Plus de sujets relatifs à : [Batch] recuperer ping dans fichier txt


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR