OVH Cloud OVH Cloud

Code de sortie ping dans un batch

3 réponses
Avatar
Laurent
Bonjour,

Mon post est peut-être un peu déplacé mais je tente ma chance ici n'obtenant
pas de réponse ailleurs, merci de m'en excuser.

Je cherche à savoir quel sont les codes de sortie générés par la commande
ping sous win2k (via la console)
C'est pour utiliser dans un batch.
Je ping une adresse, si réponse au ping je vais à une étiquette
si pas de réponse au ping, je vais à une autre étiquette.

Exemple :
=================================
set adresse=192.168.0.3
ping -n 2 %adresse%
if %ERRORLEVEL%==1 goto SUITE
if %ERRORLEVEL%==0 goto RESERVE
:SUITE
echo Cette adresse est libre ...
goto EXIT
:RESERVE
echo Cette adresse est déjà utilisé sur le réseau ...
goto EXIT
:EXIT
exit
=================================

Le hic, c'est que le ping réponde ou pas, je m'en vais toujours vers
l'étiquette correspondant à la sortie 0 (RESERVE)
y'à un truc que je pige pas ...
Si le résulat de la commande est supérieur ou égale à 1, je devrais filer
vers SUITE, non ?

Par avance, Merci.

Batcheur en herbe, vous l'aurez compris ...

3 réponses

Avatar
Christian ASTOR
Laurent a écrit:


Mon post est peut-être un peu déplacé mais je tente ma chance ici n'obtenant
pas de réponse ailleurs, merci de m'en excuser.

Je cherche à savoir quel sont les codes de sortie générés par la commande
ping sous win2k (via la console)



Rediriger et parser le fichier en output (Find par ex)

Ici, on fait IcmpSendEcho() (KB 170591)
Avatar
Patrick D
H:>ping 192.168.1.34

Pinging 192.168.1.34 with 32 bytes of data:

Reply from 192.168.1.34: bytes2 time0ms TTLd
Reply from 192.168.1.34: bytes2 time ms TTLd
Reply from 192.168.1.34: bytes2 timems TTLd
Reply from 192.168.1.34: bytes2 timems TTLd

Ping statistics for 192.168.1.34:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 30ms, Average = 17ms

H:>echo %errorlevel%
0

H:>ping 192.168.1.40

Pinging 192.168.1.40 with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 192.168.1.40:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

H:>echo %errorlevel%
0

192.168.1.34 existe, 192.168.1.40 n'existe pas
Dans les 2 cas ça renvoit un errorlevel 0

Ca renvoit un errorlevel 1 si tu fais, par exemple,
ping www.free.frrr


dans ces cas pas de résolution de nom

bref ton idée de batch est à revoir


--
* enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez
m'écrire *
* Donne un poisson à un homme, il aura à manger pour un jour
* Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
Avatar
Laurent
Merci à tous pour vos réponses

Je n'avais en effet pas saisie que la commande ping s'effectue toujours
bien, que l'adresse
pinguée réponde ou non (hormis si FQDN non existant )

Dans mon cas, la solution était donc bien de rediriger le resultat de la
commande dans un fichier
et de parser ce dernier avec la commande "find"

Ci-joint l'exemple de jean-Calude Bellamy :

On donc va tester les chaines "perte 100" et "inconnu"
Comme on ne peut pas faire de test "ou" dans une commande find, on va
l'exécuter 2 fois.
Ensuite on va stocker le résultat de ping dans un fichier texte, que l'on
soumettra ensuite 2 fois de suite à "find"

fichier "testping.bat"
-------- couper ici --------
@echo off
ping -n 1 %1 > ping.txt
find "perte 100" ping.txt > nul
if %ERRORLEVEL%==0 goto notfound
find "inconnu" ping.txt > nul
if %ERRORLEVEL%==0 goto notfound
echo %1 est disponible
goto fin
:notfound
echo %1 est indisponible
:fin
-------- couper ici --------



Laurent