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 :

problème boucle for


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Par défaut problème boucle for
    Bonjour,
    Je suis en train de développer un script batch et je rencontre un problème.
    Une de mes boucles for ne se 'boucle pas'.
    Elle prend toujours la 1ère adresse dans le fichier IP.txt.

    Voici le script de base.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    echo Heure de début: %TIME%>>condition.txt
    :BOUCLE
    set IP4=2
    for /F "delims=" %%v in (IP.txt) do (set IP=%%v GOTO BOUCLE1)
    :BOUCLE1
    snmpget -v 1 -c public -L n: %IP%%IP4% %C1%
    if errorlevel 1 goto ERREUR1
    portqry -n %IP%%IP4% -e 515 -p TCP -nr
    if errorlevel 1 goto ERREUR1
    for /f "delims=" %%a in ('snmpget -v 1 -c public -Oqv -L n: %IP%%IP4% %C1%') do set Description=%%a
    for /f "delims=" %%b in ('snmpget -v 1 -c public -Oqv -L n: %IP%%IP4% %C2%') do set SerieContact=%%b
    for /f "delims=" %%c in ('snmpget -v 1 -c public -Oqv -L n: %IP%%IP4% %C3%') do set NomImp=%%c
    for /f "delims=" %%d in ('snmpget -v 1 -c public -Oqv -L n: %IP%%IP4% %C4%') do set AddMac1=%%d
    for /f "delims=" %%e in ('snmpget -v 1 -c public -Oqv -L n: %IP%%IP4% %C5%') do set AddMac2=%%e
    for /f "delims=" %%f in ('snmpget -v 1 -c public -Oqv -L n: %IP%%IP4% %C6%') do set Modele=%%f
    for /f "delims=" %%g in ('snmpget -v 1 -c public -Oqv -L n: %IP%%IP4% %C7%') do set Serie=%%g
    for /f "delims=" %%h in ('snmpget -v 1 -c public -Oqv -L n: %IP%%IP4% %C8%') do set SerieDell=%%h
    for /f "delims=" %%i in ('snmpget -v 1 -c public -Oqv -L n: %IP%%IP4% %C9%') do set SerieHP=%%i
    for /f "delims=" %%j in ('snmpget -v 1 -c public -Oqv -L n: %IP%%IP4% %C10%') do set SerieCanon=%%j
    
    echo %IP%%IP4%;%Description%;%SerieContact%;%NomImp%;%AddMac1%;%AddMac2%;%Modele%;%Serie%;%SerieDell%;%SerieHP%;%SerieCanon%>>condition.txt
    
    :ERREUR1
    set /A IP4=IP4+1 
    IF not %IP4%==10 GOTO BOUCLE1
    if not %IP%==172.29.2. GOTO BOUCLE
    Merci d'avance

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    "GOTO", c'est mal, pour commencer... Utilises "call" à la place, "goto" devrait être réservé exclusivement à la commande "goto :eof".

    Ensuite, ton bout de code "do (set IP=%%v GOTO BOUCLE1)" est foireux... Si par exemple ta première adresse est 192.168.1.2, tu vas avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IP=192.168.1.2 GOTO BOUCLE
    Ensuite, ton code exécute la suite, puis se termine... Pas de boucle, donc !

    Remplaces par : et ensuite, regarde les commentaires du code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    echo Heure de début: %TIME%>>condition.txt
    :BOUCLE
    set IP4=2
    for /F "delims=" %%v in (IP.txt) do (call :BOUCLE1 %%v)
    
    REM Fin de programme.
    goto :eof
    
    REM %1 est le paramètre passé via "call", donc anciennement ta variable "IP".
    :BOUCLE1
    snmpget -v 1 -c public -L n: %1%IP4% %C1%
    if errorlevel 1 call :ERREUR1
    portqry -n %1%IP4% -e 515 -p TCP -nr
    if errorlevel 1 call :ERREUR1
    for /f "delims=" %%a in ('snmpget -v 1 -c public -Oqv -L n: %1%IP4% %C1%') do set Description=%%a
    for /f "delims=" %%b in ('snmpget -v 1 -c public -Oqv -L n: %1%IP4% %C2%') do set SerieContact=%%b
    for /f "delims=" %%c in ('snmpget -v 1 -c public -Oqv -L n: %1%IP4% %C3%') do set NomImp=%%c
    for /f "delims=" %%d in ('snmpget -v 1 -c public -Oqv -L n: %1%IP4% %C4%') do set AddMac1=%%d
    for /f "delims=" %%e in ('snmpget -v 1 -c public -Oqv -L n: %1%IP4% %C5%') do set AddMac2=%%e
    for /f "delims=" %%f in ('snmpget -v 1 -c public -Oqv -L n: %1%IP4% %C6%') do set Modele=%%f
    for /f "delims=" %%g in ('snmpget -v 1 -c public -Oqv -L n: %1%IP4% %C7%') do set Serie=%%g
    for /f "delims=" %%h in ('snmpget -v 1 -c public -Oqv -L n: %1%IP4% %C8%') do set SerieDell=%%h
    for /f "delims=" %%i in ('snmpget -v 1 -c public -Oqv -L n: %1%IP4% %C9%') do set SerieHP=%%i
    for /f "delims=" %%j in ('snmpget -v 1 -c public -Oqv -L n: %1%IP4% %C10%') do set SerieCanon=%%j
    
    echo %1%IP4%;%Description%;%SerieContact%;%NomImp%;%AddMac1%;%AddMac2%;%Modele%;%Serie%;%SerieDell%;%SerieHP%;%SerieCanon%>>condition.txt
    
    REM Retour à l'appelant.
    goto :eof
    
    :ERREUR1
    set /A IP4=IP4+1 
    IF not %IP4%==10 goto :eof
    REM Ne pas imbriquer comme ça les tests d'erreurs... Je laisse en place, la condition de sortie est mal pensée.
    REM if not %IP%==172.29.2. GOTO BOUCLE
    Bonne chance.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

Discussions similaires

  1. Problème boucle for
    Par revsys dans le forum Delphi
    Réponses: 20
    Dernier message: 24/05/2007, 15h50
  2. Problème boucle for
    Par rouliane dans le forum C++
    Réponses: 2
    Dernier message: 14/12/2006, 14h37
  3. [VBA-E, Débutant] Problème Boucle for
    Par strifer dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/08/2006, 12h30
  4. [Débutant] Problème boucle for
    Par toniooooo dans le forum Langage
    Réponses: 10
    Dernier message: 18/04/2006, 14h42
  5. [FLASH 8] Problème Boucle For
    Par Begood dans le forum Flash
    Réponses: 6
    Dernier message: 21/03/2006, 11h36

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