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 :

If, Find, et Errorlevel [Batch]


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
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut If, Find, et Errorlevel
    Bonjour,

    je vous contacte car je sèche sur l'utilisation d'une commande, sachant que je n'ai accès qu'à MS-DOS (exit les ajout de commandes type GREP qui me sauveraient la vie). Le plus simple est de vous montrer le bout de code posant souci:

    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
    REG QUERY "\\%1\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path | FIND "xxx"
    
    if %ERRORLEVEL% NEQ 0 (
    	REG QUERY "\\%1\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path | FIND "yyy"
    		if /I %ERRORLEVEL% NEQ 0 (
    			REG QUERY "\\%1\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path >> %LOG%
    		
    			echo [---------------------] >> %LOG%
    			echo [ yyy IS NOK IN PATH ] >> %LOG%
    			echo [---------------------] >> %LOG%
    		) else (
    		
    			REG QUERY "\\%1\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path >> %LOG%
    		
    			echo [--------------------] >> %LOG%
    			echo [ yyy IS OK IN PATH ] >> %LOG%
    			echo [--------------------] >> %LOG%
    	)
    	REG QUERY "\\%1\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path >> %LOG%
    	
    	echo [--------------------] >> %LOG%
    	echo [ xxx IS NOK IN PATH ] >> %LOG%
    	echo [--------------------] >> %LOG%
    	
    ) else (
    
    	REG QUERY "\\%1\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path >> %LOG%
    	
    	echo [-------------------] >> %LOG%
    	echo [ xxx IS OK IN PATH ] >> %LOG%
    	echo [-------------------] >> %LOG%
    )
    Pour faire simple, je recherche une chaine de caractères dans le Path de Windows, s'il ne trouve pas "xxx" il va chercher "yyy" et renvoyer dans un message (OK ou NOK pour yyy et NOK pour xxx), s'il trouve "xxx" renvoyer un autre message (OK pour xxx), le tout est loggué sans souci.

    Le problème est que je sèche sur un des serveurs que j'interroge, celui ci n'ayant pas directement "xxx" ou "yyy" dans son Path, mais un chemin du type "C:\Program~\yyy". Résultat des courses, un bon NOK ressort sur mon LOG (par chance les autres ont un joli %xxx% dans leur Path )

    Un collègue me dit que ca vient du couple IF + %ERRORLEVEL%, pourriez vous eclairer ma lantèrne sur ce souci?

    Merci

  2. #2
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    salut,

    %ERRORLEVEL% est une variable comme toutes les autres variables, il faut activer l'ERV pour qu'elle affiche son contenu correctement.

    donc il faut déclarer SETLOCAL ENABLEDELAYEDEXPANSION et changer les %ERRORLEVEL% en !ERRORLEVEL!

    autre chose : utiliser le commutateur /i de la commande FIND et supprimer le /i de %ERRORLEVEL% il n'a pas sa place ici dans:

    IF /i %ERRORLEVEL%

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 18
    Par défaut
    Merci je m'étais penché sur une autre solution qui a fait ses preuves et qui me donne des LOG moins volumineux, je mets la source au cas où ca aiderai les personnes dans le besoin. Encore merci à toi

    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
    REG QUERY "\\%1\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path | FIND /I "xxx"
    
    if /I %ERRORLEVEL% == 0 (
    	echo [-------------------] >> %LOG%
    	echo [ xxx IS OK IN PATH ] >> %LOG%
    	echo [-------------------] >> %LOG%
    	goto :step2
    	) else (
    	SET condition="nok"
    	)
    
    REG QUERY "\\%1\HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path | FIND /I "yyy"
    
    if /I %ERRORLEVEL% == 0 (
    	echo [-------------------] >> %LOG%
    	echo [ yyy IS OK IN PATH ] >> %LOG%
    	echo [-------------------] >> %LOG%
    	goto :step2
    	) else (
    	SET condition="nok"
    	)
    	
    if %condition%=="nok" (
    	echo [-----------------------------] >> %LOG%
    	echo [ xxx or yyy ARE NOK IN PATH ] >> %LOG%
    	echo [-----------------------------] >> %LOG%
    	)
    	
    echo. >> %LOG%
    echo. >> %LOG%


    Au plaisir

  4. #4
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    t'as l'embarras du choix:

    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
    set x=NOK
    set y=NOK
    
    
    REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path | FIND /i "xxx">nul
    if %ERRORLEVEL% equ 0 (set x=OK & goto:Isok) 
    
    REG QUERY "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path | FIND /i "yyy">nul
    if %ERRORLEVEL% equ 0 (set y=OK)
    
    
    echo  ---------------------  >> %LOG%
    echo   yyy IS %y% IN PATH    >> %LOG%
    echo  ---------------------  >> %LOG%
    
    :Isok
    
    echo  ---------------------  >> %LOG%
    echo   xxx IS %x% IN PATH    >> %LOG%
    echo  ---------------------  >> %LOG%

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

Discussions similaires

  1. [Eclipse 3.0.1] Find and Install
    Par Dart dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 11/01/2005, 17h25
  2. [Tomcat 4.1][Struts] Cannot find global ActionForward....
    Par otminou dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 13/09/2004, 12h04
  3. Probleme de perf avec File::Find::name;
    Par Ludo167 dans le forum Modules
    Réponses: 6
    Dernier message: 14/07/2004, 11h31
  4. module Find
    Par martijan dans le forum Modules
    Réponses: 8
    Dernier message: 09/07/2003, 11h07
  5. [langage] errorlevel
    Par armada dans le forum Langage
    Réponses: 2
    Dernier message: 02/06/2003, 14h34

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