Menu

Lire le contenu d un ping pour extraire un resultat

-
Bonjour,

je cherche a realiser un script qui me permetrait d effectuer des pings avec un retour d'erreur sur plusieurs equipements.
Jusque la pas de soucis, j ai utilise la variable %ERRORLEVEL%. Mais le probleme c'est que si l'equipement est "unreachable " j ai quand meme un retour OK.

voice un exemple de ce que j ai fait a titre d exemple :


------------------------------​------------------------------​------------------------------​---------------------
@Echo off

Rem ------------------------------​-----
:: nommage etiquette

:debut

Rem ------------------------------​-----
:: Affiche le nom de la fenetre désiré


echo.
echo ******************************​*******
ECHO ***** Connectivity testing *****
echo ******************************​*******
echo.

Rem ------------------------------​-----
:: Ont Ping google pendant 3 secondes
PING 8.8.8.8 -n 3 > NUL

Rem ------------------------------​-----
:: Si errorlevel vaut 0 alors tout est OK
IF %ERRORLEVEL% == 0 (
ECHO Site - google
ECHO STATUS [OK]
)

Rem ------------------------------​-----
:: Si errorlevel vaut 1 alors tout est NUL
IF %ERRORLEVEL% == 1 (
ECHO Site - google
ECHO STATUS [NUL]

)

echo.

ping 8.8.4.4

Rem ------------------------------​-----
:: reprend le script


goto debut
-------------------------------------------------------------------------------------------------------------------------

du coup mon idee serait de faire :

ping > ecrire dans un fichier
lire fichier : Si "lost n est pas egale a 0" ou si "unreachable" echo NUL sinon echo OK

je n ai pas le skill pour faire ca, je ne sais meme pas si c'est faisable d analyser le contenu d un texte en batch ?

Par avance merci pour vos retours et aide eventuelles
Afficher la suite 

Votre réponse

3 réponses

Messages postés
12212
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
18 mai 2019
2709
0
Merci
Bonjour,

Voilà ce que ça pourrait donner :

@echo off
setlocal enableextensions enabledelayedexpansion
chcp 28591 >nul

set log=temp123.txt

Rem ------------------------------​-----
:: Affiche le nom de la fenetre désiré
Title NU CONNECTION

echo.
echo ******************************​*******
echo ***** Connectivity testing *****
echo ******************************​*******
echo.

Rem ------------------------------​-----
:: On Ping google pendant 3 secondes
ping 8.8.8.8 -n 3 > %log%

(findstr /C:"Request timed out" /C:"Destination host unreachable" /C:"Transmit failed" %log%) && (echo Ping NUL & timeout /t 10 & exit)

for /f "tokens=4 delims==(" %%A in ('type %log% ^| find "%%"') do (
set perdus=%%A
set perdus=!perdus: =!
if !perdus! NEQ 0 (echo Ping NUL) else (echo Ping OK)
)

pause
exit



“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
Commenter la réponse de barnabe0057
0
Merci
super merci.
Je vais essayer ca.

afin de ne juste pas prendre la solution brut as tu moyen de m expliquer vite fait :

setlocal enableextensions enabledelayedexpansion
chcp 28591 >nul



(findstr /C:"Request timed out" /C:"Destination host unreachable" /C:"Transmit failed" %log%) && (echo Ping NUL & timeout /t 10 & exit)


merci
FINDSTR sert à rechercher du texte.

&& teste la réussite de la commande (teste si ERRORLEVEL vaut 0)

CHCP change le codepage, utile pour prendre en compte les noms avec accents

setlocal enableextensions active les extensions, normalement déjà activé par défaut

setlocal enabledelayedexpansion indispensable quand tu dois retarder l'expansion de certaines variables (par exemple !perdus!)
Commenter la réponse de fredef
0
Merci
merci encore !

question bonus : j utilisais dans ma version test l outil batbox.exe me permettant un jeu de couleur.
Mais celui ci en terme de securite ne me parait pas forcement fiable car je ne peux dechiffrer le contenu...

il y a t il une solution pour faire apparaitre OK et NUL en vert et rouge ?
Non il n'y a pas de solution autre que de passer par une commande externe telle que Batbox ou autre.
Commenter la réponse de fredef