IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Batch : script PING [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 13
    Par défaut Batch : script PING
    Peut on m'expliquer pourquoi cette commande ne fonctionne pas ?

    FOR /F %%I in (machines.txt) DO ping -n 1 %%I && IF NOT ERRORLEVEL 0 echo %%I >> pingNONOK.txt


    par contre celle-ci fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FOR /F %%I in (machines.txt) DO ping -n 1 %%I && IF ERRORLEVEL 0 echo %%I >> pingOK.txt

    je débute en batch, merci de votre compréhension...

    Je tiens quand même à garder une boucle FOR, et essayer de faire mon script pour trier les PC qui ping et ceux qui ne ping pas...

    merci de votre aide

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 246
    Par défaut
    A priori la commande ping ne positionne pas le flag ERRORLEVEL.

    Essaye plutôt ce script trouvé sur internet (j'aurais été bien incapable de le faire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    FOR /F %%I IN (machines.txt) DO (
    set Ordi=%%I
    call :aa
    )
    exit
    
    :aa
    ping /n 1 %Ordi% | find "TTL" > nul
    if %ERRORLEVEL%==1 echo %Ordi% >> pingNONOK.txt 
    if %ERRORLEVEL%==0 echo %Ordi% >> pingOK.txt

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 29
    Par défaut
    Je viens de tester (XP SP3), la commande errorlevel retourne bien la bonne valeur (0 ou 1 suivant le cas).

    Par contre, la gestion de errorlevel est assez particulière avec le test que tu utilises:
    le test if errorlevel 0 est valable pour un code d'erreur de 0 ou... plus
    ce qui veut dire que le test sera positif pour errorlevel=0 ET pour errorlevel=1 (ou plus).
    Pour lever l'ambiguité, utilise le code de sevyc64:
    if NOT %errorlevel%==0
    ou
    if %errorlevel% NEQ 0


    ou fait ton test d'une autre facon:
    if errorlevel 1 (si le code d'erreur est 1 ou plus)
    Pour tester si le code d'erreur vaut 0, il faut utiliser une négation:
    if not errorlevel 1 (si le code d'erreur n'est pas 1 ou plus, c'est qu'il vaut 0 ou moins)

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 13
    Par défaut réponse
    Merci pour votre intéret,

    Une tiers personnes à trouver cette solution qui fonctionne bien aussi :

    FOR /F %%I in (machines.txt) DO ping -n 1 %%I && ( echo %%I >> pingOK.txt ) || ( echo %%I >> pingNONOK.txt )
    si ça peut aider certains....

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 13
    Par défaut re
    bah bizarrement la commande que j'ai donné ci-dessus ne fonctionne plus.
    Quand je lance la commande seule dans un .bat ça tourne en boucle pendant 30s à 1 min et la fenetre dos se ferme et les 2 fichiers.txt associés restent vides....
    comprends pas
    pk ça marchait hier et là ça ne marche plus...?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 29
    Par défaut
    Citation Envoyé par obijes Voir le message
    bah bizarrement la commande que j'ai donné ci-dessus ne fonctionne plus.
    Quand je lance la commande seule dans un .bat ça tourne en boucle pendant 30s à 1 min et la fenetre dos se ferme et les 2 fichiers.txt associés restent vides....
    A tout hasard, tu as bien laissé tous les %%I en majuscule ?
    (les variables des boucles FOR sont sensibles à la casse)

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 13
    Par défaut re
    pour que le script fonctionne, j'ai rajouté ping.exe au lieu de ping....

    bizarre

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 29
    Par défaut
    Citation Envoyé par obijes Voir le message
    pour que le script fonctionne, j'ai rajouté ping.exe au lieu de ping....

    bizarre
    tu dois avoir un batch qui s'appelle ping soit dans le dossier ou tu lance ton programme, soit dans le chemin de recherche (PATH)

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Par défaut Batch de ping sur adresses IP
    @echo off
    FOR /F %%I IN (c:\Temp\adresses_a_pinger.txt) DO (
    echo Pinging %%I
    ping -n 2 -w 1000 %%I >nul
    if errorlevel 1 (
    echo Pas de reponse au ping
    ) else (
    echo Ping OK
    )
    echo.
    )
    pause >nul

    Notes:
    ping -n 2 = nombre de ping à réaliser
    -w 1000 = toute les secondes
    adresses_a_pinger.txt = fichier contenant les adresses IP à tester dans le dossier C:\Temp

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 5
    Par défaut Script de ping version Powershell
    $InputFile = "C:\Temp\adresses_a_pinger.txt"

    foreach ($IP in Get-Content $InputFile) {
    Write-Host "Pinging $IP"
    $result = Test-Connection -ComputerName $IP -Count 1 -Quiet
    if ($result) {
    Write-Host "Ping OK"
    } else {
    Write-Host "Pas de reponse au ping"
    }
    Write-Host
    }

    Read-Host -Prompt "Appuyez sur une touche pour continuer..."

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/05/2007, 20h27
  2. Batch qui ping toutes les machines d'un réseau.
    Par djollo dans le forum Windows
    Réponses: 3
    Dernier message: 15/01/2007, 16h57
  3. script ping réseau
    Par tbechir76 dans le forum Réseau
    Réponses: 2
    Dernier message: 15/12/2006, 15h15
  4. script ping toutes les 5 minutes
    Par suya95 dans le forum Programmation et administration système
    Réponses: 13
    Dernier message: 03/10/2006, 13h45
  5. [Batch] Scripts pour un systeme de backup sur serveur
    Par placebomuse dans le forum Windows
    Réponses: 3
    Dernier message: 22/04/2006, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo