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 avec l'utilisation de %ERRORLEVEL%


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Par défaut Problème avec l'utilisation de %ERRORLEVEL%
    Bonjour à toutes et tous.

    J'ai un petit problème en DOS.

    Environnement :
    - OS : Windows Server 2003
    - Compresseur : 7-zip
    - outil spécifique : find gnu

    Voilà mon algo :
    1. Je decompresse un fichier .zip
    2. Je teste si tout c'est bien passé
    2.1 Decompression OK : Je supprime le fichier .zip
    2.2 Decompression KO : ecriture dans log

    Mon problème se situe au niveau du 2, lorsque j'utilise la variable %ERRORLEVEL%.

    J'ai d'abord fait des tests en live, i.e. directement sous DOS, et ce de la manière suivante :

    Pour un fichier mauvais dont j'ai changé l'extension depuis .txt vers .zip à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    C:\PROGRA~1\7-Zip>7z.exe e E:\test\mauvais.zip
    
    7-Zip 4.32  Copyright (c) 1999-2005 Igor Pavlov  2005-12-09
    
    Processing archive: E:\test\mauvais.zip
    
    Error: E:\test\mauvais.zip is not supported archive
    
    C:\PROGRA~1\7-Zip>echo %ERRORLEVEL%
    2
    Pour un bon fichier zippé par 7zip :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    C:\PROGRA~1\7-Zip>7z.exe e E:\test\bon.zip
    
    7-Zip 4.32  Copyright (c) 1999-2005 Igor Pavlov  2005-12-09
    
    Processing archive: E:\test\bon.zip
    
    Extracting  bon.txt
    
    Everything is Ok
    
    C:\PROGRA~1\7-Zip>echo %ERRORLEVEL%
    0
    Je me suis donc basé sur ces valeurs de %ERRORLEVEL% pour mon test de bon déroulement de la décompression et j'ai écrit un ch'tit code en DOS :

    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
    @echo OFF
    SET LOG=monFichier.log
    setlocal enableDelayedExpansion
    
    echo DEBUT\n\n > %LOG%
    for /F %%f in ('E:\find_gnu.exe E:\test -name *.zip -type f -print') do (
      SET monfichier=%%f
      C:\Progra~1\7-zip\7z.exe t !monfichier!
    
      if %ERRORLEVEL% NEQ 0 (
        echo Code Retour : %ERRORLEVEL% - Decompression !monfichier! :KO >> %LOG%
      ) else (
        echo Code Retour : %ERRORLEVEL% - Decompression !monfichier! OK >> %LOG%
      ) 
    )
    
    endlocal
    Cependant, je constate au niveau de ma log que la décompression se passe toujours bien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DEBUT\n\n 
    Code Retour : 0 - Decompression E:\test\bon.zip OK 
    Code Retour : 0 - Decompression E:\test\mauvais.zip OK
    Aussi mes questions sont les suivantes :
    1. Comment se fait-il que la valeur de %ERRORLEVEL% soit toujours de 0 ?
    2. Comment faire pour récupérer la réelle valeur de retour de ma ligne de commande relative à 7-zip ?
    3. Est-il possible qu'en fait c'est ma syntaxe de %ERRORLEVEL% qui ne fonctionne pas ?

    Merci d'avance pour votre aide.

    Cdt.

    Bahan

  2. #2
    Membre éprouvé
    Avatar de koKoTis
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 438
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 438
    Par défaut
    je croi que c'est parce que ta variable errorlevel se trouve a l'intérieure d'une boucle for, essaye de la sortire

  3. #3
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Bonjour,

    1. Comment se fait-il que la valeur de %ERRORLEVEL% soit toujours de 0 ?
    --> Comme l'a dit kokotis c'est parceque tu es dans un FOR, toutes les variables sont résolues à l'entrée du FOR. Donc ton %ERRORLEVEL% reste égal à sa valeur avant le FOR.

    2. Comment faire pour récupérer la réelle valeur de retour de ma ligne de commande relative à 7-zip ?
    --> Tu as déja activé les expansions retardées de variable, reste à les utiliser partout . Remplace %ERRORLEVEL% par !ERRORLEVEL!

    3. Est-il possible qu'en fait c'est ma syntaxe de %ERRORLEVEL% qui ne fonctionne pas ?
    --> La syntaxe m'a l'air correcte.

Discussions similaires

  1. Problème avec l'utilisation de LogMessage
    Par vanquish dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 17/11/2005, 10h18
  2. Problème avec l'utilisation d'un module
    Par goblin dans le forum Modules
    Réponses: 4
    Dernier message: 09/11/2005, 20h55
  3. Problème avec l'utilisation de librairies
    Par Aradesh dans le forum MFC
    Réponses: 3
    Dernier message: 01/08/2005, 15h00
  4. [debutant] problème avec type à utiliser
    Par mlequim dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 15/07/2005, 16h08
  5. Problème avec l'utilisation de la fonction clock
    Par Matgic95 dans le forum C++Builder
    Réponses: 13
    Dernier message: 09/05/2005, 19h27

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