Lire le contenu d un ping pour extraire un resultat

Fermé
fredef - Modifié le 1 mai 2019 à 16:13
 barnabe0057 - 2 mai 2019 à 13:22
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
A voir également:

3 réponses

barnabe0057 Messages postés 14440 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 19 avril 2024 4 908
Modifié le 1 mai 2019 à 16:24
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


0
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
0
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!)
0
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 ?
0
Non il n'y a pas de solution autre que de passer par une commande externe telle que Batbox ou autre.
0