Réponse Batch ERRORLEVEL par lots
Je suis en train d'utiliser un fichier de commandes pour confirmer une connexion réseau à l'aide de la commande ping. Je veux faire du traitement par lots, puis imprimer si le ping est réussie ou non. Le problème est qu'il affiche toujours "échec" lors de l'exécuter comme un lot. Voici le code:
@echo off
cls
ping racer | find "Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),"
if not errorlevel 1 set error=success
if errorlevel 1 set error=failure
cls
echo Result: %error%
pause
"coureur" est le nom de mon ordinateur. Je vais avoir mon ordinateur ping lui-même afin que je puisse éliminer la variable d'une mauvaise connexion. Comme je l'ai dit avant, le lot est toujours en panne. Curieusement, le programme fonctionne très bien si je copie le code dans l'invite de commande. Personne ne sait pourquoi le programme fonctionne très bien dans l'invite de commande, mais ne fonctionne pas comme un lot?
Grâce
source d'informationauteur LastStar007 | 2012-02-17
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas exactement sûr de ce que l'interaction entre
FIND
et réglage du niveau d'erreur est, mais vous pouvez le faire assez facilement:Ce imprime
0
si le ping a échoué,1
si elle a réussi. Je l'ai fait il cherche juste à "0% de perte" (pas spécifiquement de 4 pings), de sorte que le nombre de pings peuvent être personnalisés.Le signe de pourcentage a été doublé, de sorte qu'il ne soit pas confondu avec une variable qui doit être remplacé.
La
FOR
truc sert simplement à définir la sortie d'une commande comme la valeur d'une variable d'environnement.Plus fiable
ping
erreur de méthode de vérification:Cela fonctionne en vérifiant si une chaîne telle que
69 ms
ou314ms
est imprimé parping
.(Traduit versions de Windows peut imprimer
42 ms
(avec l'espace), donc nous avons vérifier que.)Raison:
D'autres propositions, comme l'appariement
time=
ouTTL
ne sont pas fiables, parce que la requête ping des adresses IPv6 ne montre pasTTL
(du moins pas sur mon ordinateur Windows 7) et traduit les versions de Windows et peut montrer une version traduite de la chaînetime=
. Aussi, non seulement peuttime=
être traduit, mais parfois il peut êtretime<
plutôt quetime=
comme dans le cas detime<1ms
.Si vous étiez à
vous souhaitez voir les
%
est dépouillé. Vous devez vous échapper comme%
a une signification particulière dans un fichier de commandes:Cependant, sa plus simple à utiliser TTL que l'indication de succès;
Tests pour 0% de perte peut donner un faux positif, dans ce scénario:
Disons que vous avez normalement un lecteur réseau sur some_IP-adresse, et vous voulez savoir si oui ou non c'est sur.
Si ce lecteur est éteint, et vous ping some_IP-adresse, l'adresse IP à partir de laquelle vous exécutez la commande ping, permettra de répondre:
Answer from your_own_IP-address: target host not reachable
... 0% loss
Vous pourriez être mieux à l'aide de
if exist
ouif not exist
sur cet emplacement réseau.La solution la plus simple pour ce que je pense:
De cours, -w doit être ajustée si sur une liaison lente (100ms peut-être trop court sur la Numérotation ;-))
ce qui concerne
Une autre variante sans utiliser de variable