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 :

Je ne parviens pas à tester un deuxième argument [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut Je ne parviens pas à tester un deuxième argument
    Bonjour,

    Je souhaiterai rajouter au script un test afin que chaque argument ne soient pas utilisés seuls (tout en sachant qu'ils ne peuvent pas être combinés entre eux) sinon cela ne passe pas.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    KO
    script.cmd -c
    usage: script.cmd [-c | -g | -d | -v | -r] file
    
    OK
    script.cmd -c c:\
    Voici le code:
    Code bat : 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    @echo off
     
    REM.-- Prepare the command processor --
    SETLOCAL ENABLEEXTENSIONS
    SETLOCAL ENABLEDELAYEDEXPANSION
     
    REM.-- Set the title --
    SET title=%~nx0 %version%
    TITLE %title%
     
    REM.-- Do something useful --
     
    :: Define the list of parameters
    SET args=-c -g -d -v -r
     
    :: Check parameters
    SET "arg=%~1"
    SHIFT
    IF /I "%arg%"=="-c" (
        GOTO c
    ) ELSE IF /I "%arg%"=="-g" (
        GOTO g
    ) ELSE IF /I "%arg%"=="-d" (
        GOTO d
    ) ELSE IF /I "%arg%"=="-v" (
        GOTO v
    ) ELSE IF /I "%arg%"=="-r" (
        GOTO r
    ) ELSE (
        GOTO u
    )
     
    :c
    ECHO C
    GOTO:EOF
     
    :g
    ECHO G
    GOTO:EOF
     
    :d
    ECHO D
    GOTO:EOF
     
    :v
    ECHO V
    GOTO:EOF
     
    :r
    ECHO R
    GOTO:EOF
     
    :u
    ECHO usage: %0 [-c ^| -g ^| -d ^| -v ^| -r] file
    GOTO:EOF
    Pourriez-vous me donner un petit coup de main s'il vous plaît ?
    Merci

  2. #2
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut Olivier,

    Une solution :

    Code bat : 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
    36
    37
    38
    39
    40
    41
    42
    @echo off
     
    REM.-- Set the title --
    SET title=%~nx0 %version%
    TITLE %title%
     
    REM.-- Do something useful --
     
    :: Define the list of parameters
    SET "args=-c -g -d -v -r"
     
    :: Test the validity of the parameters
    for %%a in (%args%) do (
     if [%1]==[%%a] (
      if not [%2]==[] goto:%%a))
    echo Argument manquant ou Invalide :
    ECHO usage: %0 [-c ^| -g ^| -d ^| -v ^| -r] file
    exit/b
     
    :-c
    ECHO C
    GOTO:EOF
     
    :-g
    ECHO G
    GOTO:EOF
     
    :-d
    ECHO D
    GOTO:EOF
     
    :-v
    ECHO V
    GOTO:EOF
     
    :-r
    ECHO R
    GOTO:EOF
     
    :-u
     
    GOTO:EOF


  3. #3
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Coucou

    Tout d'abord merci pour ton aide.

    Voici le code complet:
    Code bat : 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    @echo off
     
    REM.-- Prepare the command processor --
    SETLOCAL ENABLEEXTENSIONS
    SETLOCAL ENABLEDELAYEDEXPANSION
     
    REM.-- Version history --
    REM         X.X YYYYMMDD   Author Description
    SET version=1.0 &:20141203 leon   initial version
    SET version=%version: =%
     
    REM.-- Set the default color of the command prompt --
    COLOR 07
     
    REM.-- Set the title --
    SET title=%~nx0 %version%
    TITLE %title%
     
    REM.-- Do something useful --
     
    :: Define the list of parameters
    SET "args=-c -g -d -v -r"
     
    :: Check the parameters
    FOR %%a in (%args%) DO (
     IF [%1]==[%%a] (
      IF [%2]==[%%a] GOTO:u
      IF [%2]==[-] GOTO:u
      IF NOT [%2]==[] GOTO %%a
     )
    )
    GOTO:u
    EXIT /b
     
    :-c
    ECHO C
    GOTO:EOF
     
    :-g
    ECHO G
    GOTO:EOF
     
    :-d
    ECHO D
    GOTO:EOF
     
    :-v
    ECHO V
    GOTO:EOF
     
    :-r
    ECHO R
    GOTO:EOF
     
    :u
    ECHO usage: %0 [-c ^| -g ^| -d ^| -v ^| -r] file
    GOTO:EOF

    Voici la partie où j'ai rajouté deux tests supplémentaires:
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    :: Check the parameters
    FOR %%a in (%args%) DO (
     IF [%1]==[%%a] (
      IF [%2]==[%%a] GOTO:u
      IF [%2]==[-] GOTO:u
      IF NOT [%2]==[] GOTO %%a
     )
    )
    GOTO:u
    EXIT /b

    L'objectif c'est qu'il ne doit pas être possible de saisir 2 paramètres en même temps.

    Le script a été testé et fonctionne correctement mais j'aimerai savoir si le code est propre ou pas ?

    Encore merci

  4. #4
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Je te conseil également de tester si on a un 3éme argument.

    Ensuite le test du 2éme argument tu peux le faire avant (call:test)

    Donc je te conseille qqe chose comme ça :


    (Tu n'a pas besoin de l'expansion retardée)

    Code bat : 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    @echo off
     
    REM.-- Version history --
    REM         X.X YYYYMMDD   Author Description
    SET version=1.0 &:20141203 leon   initial version
    SET version=%version: =%
     
    REM.-- Set the default color of the command prompt --
    COLOR 07
     
    REM.-- Set the title --
    SET title=%~nx0 %version%
    TITLE %title%
     
    REM.-- Do something useful --
     
    :: Define the list of parameters
    SET "args=-c -g -d -v -r"
     
    :: Check the parameters
     
    IF not [%3]==[] goto:x
    call:test %2
     
    for %%a in (%args%) do (
     if [%1]==[%%a] (
      if not [%2]==[] goto:%%a))
    goto:u
    exit/b
     
    GOTO:u
    EXIT /b
     
    :-c
    ECHO C
    GOTO:EOF
     
    :-g
    ECHO G
    GOTO:EOF
     
    :-d
    ECHO D
    GOTO:EOF
     
    :-v
    ECHO V
    GOTO:EOF
     
    :-r
    ECHO R
    GOTO:EOF
     
    :u
    ECHO usage: %0 [-c ^| -g ^| -d ^| -v ^| -r] file
    GOTO:EOF
     
    :x
    ECHO Error [%3] Too much parameters
    GOTO:EOF
     
    :test
     
    set "$valeur=%1"
    if "%$valeur:~0,1%"=="-" (
      ECHO Error [%1] Only one parmeter allowed
      exit/b
    )


  5. #5
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Merci beaucoup, ton aide m'a été précieuse.

    Avant de clôturer cette discussion, je pèche pour afficher le nombre total de fichiers traités dans un répertoire toujours pour le même script.

    Voici le partie concernée:
    Code bat : 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
    :: Generate the index file 
    :-g
    SET /a done=1
    IF EXIST %2\%def_f% (
      ECHO %def_f% ^(generating^): file already present
     ) ELSE (
      ECHO %def_f% ^(generating^): complete
      ECHO.
      FOR /f %%b IN ('"dir /b /a:-d "%2\*.*" 2>nul"') DO (
       ECHO !done! of !done! ^= %%b: complete
       DIR /b /a:-d "%2\*.*" > %2\%tmp_f%
       SET /a done=!done!+1
      )
      TYPE %2\%tmp_f% | %t_fstr% -v "index.tmp" >> %2\%def_f%
      DEL %2\%tmp_f%
    )
    GOTO:EOF

    à l'exécution, j'obtiens l'affichage suivant:
    makeindex -g e:
    index.txt (generating): complete

    1 of 1 file: complete
    2 of 2 file: complete
    3 of 3 file: complete
    4 of 4 file: complete
    5 of 5 file: complete

    au lieu de:
    1 of 5 file: complete
    2 of 5 file: complete
    3 of 5 file: complete
    4 of 5 file: complete
    5 of 5 file: complete
    Merci d'avance de ta et/ou vos réponses

  6. #6
    Membre émérite Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Par défaut
    Bonjour,
    Je serais d'avis de dire qu'il faudrait deux FOR, le premier pour compter le nombre total de fichiers dans le dossier et le second est celui que tu fais déjà.

    Exemple:
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    REM Dans ton FOR qui compte le nombre de fichiers du dossier
    for /f %%A in ('dir /a-d-s-h /b ^| find /v /c ""') do set compteur=%%A
     
    REM Puis dans ton FOR actuel
    ECHO !done! of !compteur! ^= %%b: complete
    Bon c'est expliqué à l'arrache mais je pense que c'est compréhensible (j'espère).

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

Discussions similaires

  1. fonction js qui ne reconnait pas le deuxième argument
    Par Sianobel dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 05/08/2010, 09h58
  2. tester si un argument est de type entier
    Par freestyler dans le forum Shell et commandes GNU
    Réponses: 18
    Dernier message: 06/12/2007, 15h39
  3. Je ne parviens pas à catch ma std::exception !
    Par jomeo dans le forum SL & STL
    Réponses: 2
    Dernier message: 30/03/2007, 12h29
  4. Réponses: 2
    Dernier message: 05/02/2007, 00h37
  5. Process inconnu que je ne parviens pas à killer
    Par HNT dans le forum Administration système
    Réponses: 5
    Dernier message: 06/07/2006, 16h55

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