Se connecter avec
S'enregistrer | Connectez-vous

COMMANDE PING AVEC DATE ET HEURE

Dernière réponse : dans Programmation

Bonjour,

je souhaite créer un .bat ou autre qui permet de me donner si le ping sur une adresse répond avec la date et lheure de réponse.

quand je fait un .bat avec :

ping -t 192.168.0.1 par exemple il me met quand ca répond pas moi je veu seulement renvoyer les résultat quand le ping répond dans un fichier texte avec lheure et la date.

J'aimerai aussi que le ping ce fasse toutes les 2 minutes par exemple au lieu de toutes les secondes.

Merci de votre aide.

Autres pages sur : commande ping date heure

Lassé par la pub ? Créez un compte

Ben m'aider pourquoi on aide pas ici

moi je m'y connai pas trop je suis boucher ! lol !

je fais ping - t 192.168.0.1 et j'ai pas la date et lheure et je veu que les réponse et pas les "pas de réponse" et je voulais savoir si on pouvai mettre les résultats dans un fichier .txt ou autre et derniére chose je veu savoir si on peu faire le test toutes les 2 minutes environ voila merci sinon tanpis je vai essayer de voir si ya des commandes spéciale
Expert Programmation

lol.
Normalement, ici, c'est de l'entraide entre programmeur. Mais contre un coup d'attendrisseur, on peut t'aider.

(Une question bête, tu es boucher chez EDF ?)

Pourquoi donnes-tu -t comme argument ?

La commande ping de microsoft n'est même pas capable de gérer son code de retour. Impossible de gérer l'affaire avec %ERRORLELVE%. On va ruser.
La commande pour attendre n'existe pas sous Windows. Par défaut. On va encore ruser.
La commande pour afficher la date s'appelle date.
Expert Programmation

Alors pour envoyer 1 ping, il faut utiliser l'argument -n 1.

Pour attendre, je te propose soit la fonction sleep des unixtools http://unxutils.sourceforge.net/ soit le hack suivant :
rem - Attendre 120 secondes
ping -n 120 127.0.0.1 > NUL


Pour savoir ce que renvoie
ping -n 1 192.168.0.1
on va analyser sa sortie avec find.

ping peut répondre :

Envoi d'une requête 'ping' sur 127.0.0.1 avec 32 octets de données :

Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128

Statistiques Ping pour 127.0.0.1:
Paquets : envoyés = 1, reçus = 1, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms

La requête Ping n'a pas pu trouver l'hôte 327.0.0.1. Vérifiez le nom et essayez à nouveau.


Envoi d'une requête 'ping' sur 137.137.137.137 avec 32 octets de données :

Réponse de 10.dd.nn.ss : Impossible de joindre l'hôte de destination.

Statistiques Ping pour 137.137.137.137:
Paquets : envoyés = 1, reçus = 1, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
Minimum = 0ms, Maximum = 0ms, Moyenne = 0ms


Les réponses sont très différentes.
Je te propose de remarquer cette ligne à quand ça marche :
Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128

Si on trouve le mot "TTL", considérons qu'on est bon.

La commande find renvoie 0 si elle a trouvé quelque chose, autre chose sinon.
Le retour se lit avec ERRORLEVEL
  1. :debut
  2. sleep 120
  3. ping -n 1 192.168.0.1 | find "TTL"
  4. if %ERRORLEVEL%==0 date /T
  5. goto debut
Expert Programmation

Parce que je sais tout :sol: 
Et je suis très soupconneux. Je viole mes principes en te donnant une solution toute faite. Alors un brave boucher, je me dis que le faire réfléchir sur de la programmation, ce n'est peut-être pas très cool. Sauf que ce boucher est à EDF. C'est très bizarre. Et je me demande si je ne vais pas regretter d'avoir violé mes principes. Hein ? On s'en fout ? ok.

Ben -t ça répète toutes les secondes, ce n'est pas ce que tu veux.
on va ruser : Ben je viens te te l'expliquer : on utilise FIND.
La soluce ne te convient pas ?

voila ce que j'ai mis dans mon fichier .txt que je renomme en .bat :

:D ebut
sleep 120
ping -n 1 192.168.0.1 | find "TTL"
if %ERRORLEVEL%==0 date /T
commande > test.TXT
goto debut

il me met : "'sleep' n'est pas reconnu en tant que commande interne" en plus ca tourne trés vite on a pas le temp de voir et le fichier ne ce crée pas es ce normal ???
Expert Programmation

pasque zeb à recopié un autre post dans lequel on parlait aussi de unxtool qui fourni la commande sleep.
et sinon ''commande'' c'est une commande à toi ? je pense pas qu'elle existe ...

Voila j'ai modifié mes maintenant j'ai un autre probléme
command on restaure les commande dans system 32 ???

je fais un batch tous simple du type :
  1. ping 192.168.0.1

il me le répete à l'infini il me met à l'infini ces lignes ??? :

C:\Documents and Settings\laurent-adm\Bureau>ping 192.168.0.1
Expert Programmation

Je n'ai pas compris :??: 

Un peu quand même.
Si tu veux qu'une commande n'affiche rien, écris ça:
cmmande > NUL


Dans un batch, si tu ne veux pas que la ligne qui va être exécutée ne s'affiche, écris ça :
@ligne de code


Si tu veux désactiver l'affichage des lignes qui vont être exécutées, désactive la commande echo comme ça :
echo off


Donc une bonne astuce, c'est de mettre ça au début du batch :
@echo off

voila ce que je tape avec des recherches :
  1. @echo off
  2. rem délai en secondes
  3. set delay=1
  4. :loop
  5. ver | time > temp.txt
  6. echo set time=%%4>current.bat
  7. ver | date > temp.bat
  8. echo set date=%%4>current.bat
  9. del temp.bat
  10. del current.bat
  11. echo .
  12. echo --- %date% %time%
  13. echo .
  14. ping.exe -n 1 192.168.0.1
  15. ping.exe -n %delay% 192.168.0.1 >NUL:
  16. goto loop

il me retourne bien un fichier temp.txt mais il y a dedans qu'une seul date :

L'heure actuelle estÿ: 12:34:58,68
Entrez la nouvelle heureÿ:

voila comment c'est écrit en plus moi je veu la date pour chaque réponses du type :

L'heure actuelle est : 12h37
L'heure actuelle est : 12h38
L'heure actuelle est : 12h38

et cela pour chaque bonne réponse ...

Merci
Expert Programmation

Oups, je suis très bête. J'ai confondu date de windows et date de UNIX. Celui de windows ne renvoie pas l'heure. Il faut utiliser TIME tu as raison.

ver|time
est une grosse astuce à deux balles de l'ancien temps. Utilise une de ces deux syntaxes à la place (la seconde est meilleure ;)  ) :
time /T
echo %time%


Voilà où est ton erreur :
Si commande est tout ton programme, tu fais ça :
commande > fichier
et tout le contenu de ta commande ira dans le fichier qui sera créé pour l'occasion.

Dans ta boucle le fichier est recréé à chaque fois.
Pour ne pas recréer le fichier il faut utiliser cette syntaxe :
commande >> fichier

Attention toutefois à penser à avoir un fichier vide au début

Que penses-tu de ça :
  1. @echo off
  2. rem Délai en secondes
  3. set delay=1
  4.  
  5. echo Ping vers 192.168.0.1 > temp.txt
  6. echo ===================== >> temp.txt
  7.  
  8. :loop
  9. ping.exe -n 1 192.168.0.1 | find "TTL" > NUL
  10. if %errorlevel% == 0 echo %date% %time:~,8% >> temp.txt
  11. rem Attendre
  12. ping.exe -n %delay% 127.0.0.1 > NUL
  13. goto loop



(le truc bizarre :~,8, c'est pour prendre que les 8 premiers caractères de time. Tu peux mettre 5 pour ne pas voir les secondes)
Pour ne pas encombrer le réseau, utilise l'adresse spéciale 127.0.0.1 pour ton ping d'attente.
Expert Programmation

  1. @ECHO OFF
  2. REM - Version Deluxe
  3. IF "%2"=="" GOTO syntaxe
  4.  
  5. ECHO Ping vers %2
  6. ECHO =========================
  7.  
  8. :loop
  9. PING -n 1 %2 | FIND "TTL" > NUL
  10. IF %ERRORLEVEL%==0 ECHO %date% %time:~,8%
  11. PING -n %1 127.0.0.1 > NUL
  12. GOTO loop
  13.  
  14. :syntaxe
  15. ECHO %0 <delai_en_seconde> <adresse_a_vérifier>
  16. ECHO kmloujdi(c)2007 (+un peu de PPC)
  17. ECHO ----------------------------
  18. ECHO Exemple: %0 120 192.168.0.1 > fichier.txt


:sol: 

ben je l'ai essayé ... sinon une autre question j'ai mi ce code pour le contraire :
  1. @echo off
  2.  
  3. echo Ping vers 192.168.0.1 en cours
  4. echo NE PAS FERMER LA FENETRE
  5.  
  6. rem Délai en secondes
  7. set delay=1
  8.  
  9. echo Etat des serveurs ko clasarc > pigpas.txt
  10. echo ============================ >> pigpas.txt
  11.  
  12. :loop
  13.  
  14. ping.exe -n 1 192.168.0.2 | find "demande" > NUL
  15. if %errorlevel% == 0 echo 192.168.0.2 %date% %time:~,8% >> pigpas.txt
  16. rem Attendre
  17. ping.exe -n %delay% 127.0.0.1 > NUL
  18.  
  19. ping.exe -n 1 198.168.0.1 | find "demande" > NUL
  20. if %errorlevel% == 0 echo 192.168.0.1 %date% %time:~,8% >> pigpas.txt
  21. rem Attendre
  22. ping.exe -n %delay% 127.0.0.1 > NUL
  23.  
  24. goto loop

et je souhaite que lorsque ca ping pas ca m'envoye une alerte par mail es ce possible ???
ou un netsend pour prévenir vers plusieurs personne Merci (j'pense que se sera + simple)
Expert Programmation

Il y a le mot "demande" dans la réponse de ping si ça plante ?
Si oui, c'est OK.
A ta place, je ne mettrais l'attente qu'une fois. (Ligne 17 & 22)
Le titre dit que c'est pour 192.168.0.1. Ah ? Et la ligne 14, elle dit 192.168.0.2 elle.

si tu veux mettre plusieurs instructions, tu peux les mettre sur une seule ligne avec comme séprarateur le signe & ou &&
commande1 & commande2
commande3 && commande4

commande1, 2 et 3 s'exécuteront de toutes façon.
commande4 ne s'exécutera que si commande3 renvoie un %ERRORLEVEL% égal à 0

Une autre technique consiste à utiliser des parenthèses. La première des parenthèses devant être sur la même ligne que le IF :
if %errorlevel% == 0 (
commande1
commande2
...
)


Quant à comment envoyer un message par mail, je n'en ai aucune idée :( 
NETSEND devrait être un truc plus facile oui :) 

Non ca marche pas bien parceque que il n'écrit pas dans mon .txt l'état de chaques postes.

bref j'ai modifié comme ça :
  1. @echo off
  2.  
  3. echo Ping vers 192.168.0.1 en cours
  4. echo NE PAS FERMER LA FENETRE
  5.  
  6. rem Délai en secondes
  7. set delay=1
  8.  
  9. echo Etat des serveurs ko clasarc > pigpas.txt
  10. echo ============================ >> pigpas.txt
  11.  
  12. :loop
  13.  
  14. ping.exe -n 1 192.168.0.1 | find "demande" > NUL
  15. if %errorlevel% == 0 echo 192.168.0.1 %date% %time:~,8% >> pigpas.txt
  16. net send 130.98.21.192 192.168.0.1 ne répond plus !
  17. rem Attendre
  18. ping.exe -n %delay% 127.0.0.1 > NUL
  19.  
  20. ping.exe -n 1 198.168.0.2 | find "demande" > NUL
  21. if %errorlevel% == 0 echo 192.168.0.2 %date% %time:~,8% >> pigpas.txt
  22. net send 130.98.21.192 192.168.0.2 ne répond plus !
  23. rem Attendre
  24. ping.exe -n %delay% 127.0.0.1 > NUL
  25.  
  26. goto loop


c'est parfait Mais .... (ya tjrs un mais)

la comande net send marche et tous mais comme je fais un ping toutes les secondes j'aimerai que je resoivent un seul net send avec l'heure actuel par exemple

Merci de ton aide
Expert Programmation

SI CA MARCHE ! C'est expliqué comment l'utiliser ligne 18. :sarcastic: 

Ca t'emmerde de répondre à mes questions ou à mes commentaires ?
Je ne te dis pas ce que tu dois faire, mais tu pourrais quand même justifier tes décisions puisse que je prends la peine de te les faire.

(J'ai juste que si tu décourages les gens qui veulent bien t'aider, tu ne trouveras bientôt plus personne)

Passons.
Pour faire quelque chose une seule fois, initialise une variable à Faux (ou autre) au début du programme :
  1. SET DEJA_FAIT=FALSE

Ensuite, quand tu rencontres le cas à ne faire qu'une fois, tu mets :
  1. IF %DEJA_FAIT%==FALSE (
  2. commande_à_ne_faire_qu'une_fois
  3. SET DEJA_FAIT=TRUE
  4. )

Merci de ton aide c'est bon !

  1. @echo off
  2.  
  3. echo Ping vers 192.168.0.1 en cours
  4. echo NE PAS FERMER LA FENETRE
  5.  
  6. SET DEJAFAIT16801=FALSE
  7. SET DEJAFAIT16802=FALSE
  8. SET DEJAFAIT16803=FALSE
  9.  
  10. rem Délai en secondes
  11. set delay=1
  12.  
  13. echo Etat des serveurs ko clasarc > pigpas.txt
  14. echo ============================ >> pigpas.txt
  15.  
  16. :loop
  17.  
  18. rem PING 192.168.0.1
  19.  
  20. ping.exe -n 1 192.168.0.1 | find "demande" > NUL
  21. if %errorlevel% == 0 echo 192.168.0.1 %date% %time:~,8% >> pigpas.txt
  22.  
  23. IF %DEJAFAIT16801%==FALSE (
  24. net send 130.98.21.192 192.168.0.1 ne répond plus !
  25. SET DEJAFAIT16801=TRUE
  26. )
  27. rem Attendre
  28. ping.exe -n %delay% 127.0.0.1 > NUL
  29.  
  30. rem PING 192.168.0.2
  31.  
  32. ping.exe -n 1 192.168.0.2 | find "demande" > NUL
  33. if %errorlevel% == 0 echo 192.168.0.1 %date% %time:~,8% >> pigpas.txt
  34.  
  35. IF %DEJAFAIT16802%==FALSE (
  36. net send 130.98.21.192 192.168.0.2 ne répond plus !
  37. SET DEJAFAIT16802=TRUE
  38. )
  39. rem Attendre
  40. ping.exe -n %delay% 127.0.0.1 > NUL
  41.  
  42. rem PING 192.168.0.3
  43.  
  44. ping.exe -n 1 192.168.0.3 | find "demande" > NUL
  45. if %errorlevel% == 0 echo 192.168.0.3 %date% %time:~,8% >> pigpas.txt
  46.  
  47. IF %DEJAFAIT16803%==FALSE (
  48. net send 130.98.21.192 192.168.0.3 ne répond plus !
  49. SET DEJAFAIT16803=TRUE
  50. )
  51. rem Attendre
  52. ping.exe -n %delay% 127.0.0.1 > NUL
  53.  
  54. goto loop


Maintenant c'est parfait MERCI !
Expert Programmation

juste pasque je me fait chier, ma version :

  1. @echo off
  2. if "%1"=="*ping*" goto ping
  3.  
  4. set marchepas=
  5. echo FERME PAS LA FENETRE !
  6.  
  7. :loop
  8. for %%a in (192.168.0.1 192.168.0.2 192.168.0.3) do call %0 *ping* %%a
  9. goto loop
  10.  
  11. :ping
  12. echo ping en cours de %2
  13. ping -n 1 %2 | find "TTL" > NUL
  14. if not ERRORLEVEL 1 goto attente
  15.  
  16. echo.|date | find "actu" >> pingpas.txt
  17. echo.|time | find "actu" >> pingpas.txt
  18. echo Et %2 ne repond pas >> pingpas.txt
  19.  
  20. echo %marchepas% | find "*%2*" > NUL
  21. if not ERRORLEVEL 1 goto attente
  22.  
  23. net send 120.98.21.192 %2 ne repond pas.
  24. set marchepas=%marchepas% *%2*
  25.  
  26. :attente
  27. ping -n 120 127.0.0.1 >NUL
  28. if errorlevel 1 exit
Expert Programmation

Merci Batchy.
(echo.|date|find "jour" ;)  )

Note pour Kamel / Avis à tous :
Batchy aurait pu te balancer ça tout de suite. Mais l'esprit de ce forum (PPC/Programmation) c'est de nous entraider entre développeurs, et certainement pas pour les uns de faire de travail demandé par les autres. Mais puisque tu montres plein de bonne volonté, tu as maintenant un chouette programme.


En passant, ce programme pond 720 lignes de 35 caractères par jour, soit 46 Ko. Il ne faudrait pas que ce soit un problème.

Merci Batchy en tous cas j'ai appris plein de truc c cool

Par contre ca à l'air plus propre mais ca marche pas enfin j'ai essayé et j'ai pas de message netsend quand ca ping pas...


et aussi tu récupére l'heure actuel windows c bien mais ca m'affiche bizarement :

L'heure actuelle estÿ: 14:20:35,50 d'ou vien ce ÿ ???

En tous cas le reste ca marche et c plus clair merci

zeb :

"En passant, ce programme pond 720 lignes de 35 caractères par jour, soit 46 Ko. Il ne faudrait pas que ce soit un problème"

c'est a dire ? ca peu pausser un probléme ???
juste comme ça on peu mettre une plage horaire a la place du délais d'intervalle des pings exemple : de lundi à vendredi de 8h-à 19h ca encombrerai moin le réseau si c ça que tu voulais me dire
Expert Programmation

Caractère n°255. Provient de la conversion ASCII/ANSI entre DOS et WINDOWS. (On en est toujours là en 2007 :sarcastic:  )

kmloujdi, arrête de dire "ça marche pas" c'est vexant.
"Ca ne fait pas exactement ce que toi tu veux", ce n'est pas pareil :o 
Même si effectivement, tu as explicitement (tout le monde ne le fait pas, merci) parlé du netsend dans tes messages.

D'autant que c'est à toi d'adapter le code.

Batchy, kml parlait d'envoyer un e-mail, une idée ?
(Moi, toujours pas :(  )
Expert Programmation

ce que dit zeb c'est que si on laisse tourner ce prog tout le temps il génèrera un fichier qui peut grossir de 46Ko par jour. ça fait qu'au bout d'une semaine on peut se retrouver avec 322 Ko.

sinon si les netsend ne marchent pas c'est que j'ai tout simplement pas mis la bonne ip (120.98.21.192 au lieu de 130.98.21.192)

pour les messages, nan. sauf en installant des trucs en plus ;) 

puis sinon zeb pourquoi grepper le jour plutot que le "actu" de actuellement ?
Expert Programmation

@zeb's :

C:\>ver
Microsoft Windows XP [version 5.1.2600]

C:\>date
La date du jour est : 22/06/2007
Entrez la nouvelle date : (jj-mm-aa) _

C:\>time
L'heure actuelle est : 15:06:46,73
Entrez la nouvelle heure :

Je n'ai pas de actuellement :( 

"grepper" :love: 
Mais Kml ne va pas comprendre :lol: 
Expert Programmation

forcement ...
Microsoft(R) Windows 98
(C)Copyright Microsoft Corp 1981-1999.

C:\WINDOWS\Bureau>date
La date actuelle est Ven 22/06/2007
Entrez la nouvelle date (jj.mm.aa) :

C:\WINDOWS\Bureau>time
L'heure actuelle est 13:35:42,45
Entrez la nouvelle heure :
remarquez aussi que l'heure de mon système est en GMT, mais ça il comprend pas ;) 

Waouhhh la je comprend pas trés bien effectivement ...
Alors j'ai essayé avec tes 2 adresses pareil quand je lance à partir d'une fenetre ms-dos manuellement les deux adresses ne ping pas et quand je lance le batch j'ai mon fichier txt mais le net send n'arrive pas.
Il doit normalement arriver lorceque l'adresse ne ping pas on est d'accord ?
Expert Programmation

honnetement je vois pas pourquoi ça marcherai pas. et je pourrais pas le savoir. quand j'ai tésté sous 98 j'avais évidement pas de net send vu que 98 ne les supporte pas, à la place j'avais un message d'erreur qui me confirmait que mon programme fait ce qu'il fallait ;) 
Expert Programmation

Citation :
Microsoft(R) Windows 98
(C)Copyright Microsoft Corp 1981-1999.

Mon pauvre Batchy. Allez, clique là.
je t'ai pas attendu, à ton avis pourquoi j'ai précisé que l'heure est GMT ? ;) 
m'enfin les dualboot c'est pratique ;) 

PS : banni toi ;) )

Ok ca marche je me suis mal exprimé dsl...

En faite on va dire les 2 adresses ne répondent pas j'ai bien le message netsend qu'il faut et qui s'affiche 1 fois c'est trés bien mais le hic c'est que si la deuxiéme adresse ne répond pas elle aussi rien ne s'affiche pour la deuxiéme...

l'ideal en faite serai un message affiché une seule fois par adresse IP.

je c pas si je me suis bien exprimé ... :heink: 
Lassé par la pub ? Créez un compte