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 :

Quelques notions importantes sur les paramètres en scripting de commandes NT


Sujet :

Scripts/Batch

  1. #1
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    juillet 2008
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : juillet 2008
    Messages : 1 011
    Points : 1 986
    Points
    1 986
    Par défaut Quelques notions importantes sur les paramètres en scripting de commandes NT
    salut,

    ce petit post n'est pas une introduction sur la notion des paramètres
    Pour ceux qui ne savent pas qu'est ce qu'un paramètre, vous pouvez voir ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hh ntcmds.chm::/call.htm

    difference entre %1 et %1%
    ---------------------------


    en parcourant un peu le net j'ai observé que des batcheurs utilsent la syntaxe %1% au lieu de %1, ce choix ce porte essentiellement sur la coloration syntaxiques de quelques éditeurs de cette syntaxe.
    malheureusement, cette syntaxe "%1%" peux poser quelques problèmes:

    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
    @echo off 
    Setlocal
    
    call :_1 10
    call :_2 dev
    call :_3 dev %%%%1%%%%
    call :_3 dev %%%%1 ::
    
    endlocal
    pause & exit /b
    
    :_1
    echo.
    echo %0
    set /A a=%1%*2
    set /A b=%1*2
    echo %%1%% %a%
    echo  %%1 %b%
    goto:eof
    
    :_2
    echo.
    echo %0 
    echo %%1%% %1%eloppez %
    echo  %%1 %1eloppez %
    goto:eof
    
    :_3
    echo.
    echo %0 %2
    %3 for %%a in (%1%) do echo %%a
    for %%a in (%1) do echo %%a
    goto:eof
    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
    :_1
    %1% 10102
     %1 20
    
    :_2
    %1% dev
     %1 developpez
    
    :_3 %1%
    deva
    for
    %a
    in
    (dev
    
    :_3 %1
    dev

    la commande shift
    ------------------


    la commande shift est l'une des commandes internes, elle permet de décaler la position des paramètres et elle ne s'utilise qu'avec les fichiers de commandes, c'est à dire qu'on ne peux pas l'utiliser interractivement.


    voici un petit exemple:


    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
    @ECHO OFF
    
    Set @SFUNC=CALL :DECAL A B C D
    
    %@SFUNC%
    
    EXIT /B
    
    
    :DECAL
    echo %1
    shift /0
    echo %1
    shift /0
    echo %1
    shift /0
    echo %1
    shift /0
    echo %1
    
    GOTO :EOF

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A
    B
    C
    D
    Commande ECHO désactivée.


    je vous conseille de voir l'aide de cette commande, qui est plus complète.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hh ntcmds.chm::/shift.htm

    et pour finir, voici un petit exemple qui se base sur la commande "Shift".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @ECHO OFF
    SEt X=%1||%0 "(1 1 9)" A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    SEt /=%2& S%6T #=%4& S%6T ##=%5& S%6T @=%6& SET ###=%~1
    %7OR /L %%? In %###% %5o S%9i%7t
    F%7R %%%2 %1n (%4 %5 %7 %8) D%7 S%@%t %%%2=%%%2
    F%7R /%4 %%? %1%6 %###% %##%%7 sh%1ft
    Echo %##%%@%%5%@%%L%%L%%O%%P%%P%%@%%9.%#%%O%%M%
    P%/%%4%2E

    extraction de données par positionnement de paramètres
    ----------------------------------------------------------


    les paramètres nous permettent aussi de manipuler des chaînes de caractères, cette technique dépend fortement de la chaîne de caractères, et n'est malheureusement pas générique

    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
    @Echo OFF
    
    SET STR=Adresse Email : walid2mi@gmail.com
    
    
    Pushd "%Temp%"
    
    Echo(%str% | findstr /i "^Adresse email"  > _adresse.bat
    >adresse.bat Echo set email=%%3
    call _adresse.bat
    echo(%email%
    erase _adresse.bat adresse.bat 
    
    Popd
    
    exit /b
    paramètres %0
    ----------------------------------------------------


    si on utilise le paramètre %0 dans un sous-programme il va nous retourner le nom du label, par contre si on appel un autre script de commande par CALL le paramètre %0 va se referer au nom du fichier de commande appelé.

    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
    CMD> type hello.bat 
    
    
    @Echo OFF
    
    Call :label a
    Call hello2 a
    
    pause
    exit /b
    
    
    :label
    echo %0 %1
    
    CMD> type hello2.bat
    
    echo %0 %1
    
    CMD> hello.bat

    expansion de références d'arguments
    --------------------------------------


    les paramètres supportent les mêmes modificateurs de variables (voir: HOWTO variables 1/2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off
    
    for %%# In (attrib.exe cipher.exe command.com) do Call :FindFiles %%#
    pause
    Exit /b
    
    
    :FindFiles
    echo(%~tz$PATH:1
    Goto:EOF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    14/04/2008 13:00 12288 D:\WINDOWS\system32\attrib.exe
    14/04/2008 13:00 57344 D:\WINDOWS\system32\cipher.exe
    14/04/2008 13:00 52103 D:\WINDOWS\system32\command.com
    on peux aussi utiliser la syntaxe %* qui se refère à tous les paramètres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @echo off
    Call :label A B C
    exit /b
    
    :label
    echo %%1 %1
    echo %%* %*

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    juin 2009
    Messages
    3 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : juin 2009
    Messages : 3 812
    Points : 9 170
    Points
    9 170
    Par défaut
    et pour l’explication et la clarification sur ces paramètres

  3. #3
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    juillet 2008
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : juillet 2008
    Messages : 1 011
    Points : 1 986
    Points
    1 986
    Par défaut
    salut,

    Citation Envoyé par hackoofr Voir le message
    et pour l’explication et la clarification sur ces paramètres
    merci hackoofr, tu sais parfois, il me viens à l'esprit de commettre des fautes techniques dans mes HOWTO, pour que les membres participent, me critiquent, me donnent leurs avis,...etc

    mais bon, on va continuer, voici la suite du premier post:


    référence textuel des arguments:
    ---------------------------------


    nous pouvons utiliser nos paramètres avec l'expansion retardé ou avec l'expansion avec CALL pour sécuriser nos paramètres s'ils contiennent des caractères réservés.

    1- référence textuel avec expansion retardée:

    on peux utiliser ces syntaxes: !%1! !%2! !%3! ...!%9! et même !%*!

    voici un exemple:

    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
    @echo off
    setlocal enabledelayedexpansion
    
    set je suis une variable contenant un X=X
    set variable=1
    
    call :z je suis une variable contenant un x
    
    endlocal
    pause & exit /b
    
    
    :z
    setlocal enabledelayedexpansion
    
    echo REFTEXT: %%* !%*!
    echo REFTEXT: %%4 !%4!
    
    endlocal
    goto :EOF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    REFTEXT: %* X
    REFTEXT: %4 1
    2- référence textuel avec l'expansion avec CALL:

    on peux utiliser ces syntaxes: %%%1%% %%%2%% %%%3%% ...%%%9%% et même %%%*%%

    voici le même exemple, mais cette fois avec l'expansion avec 'CALL'

    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
    @echo off
    setlocal Disabledelayedexpansion
    
    set je suis une variable contenant un X=X
    set variable=1
    
    call :z je suis une variable contenant un x
    
    endlocal
    pause & exit /b
    
    
    :z
    setlocal Disabledelayedexpansion
    
    call echo REFTEXT: %%%%* %%%*%%
    call echo REFTEXT: %%%%4 %%%4%%
    
    endlocal
    goto :EOF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    
    REFTEXT: %* X
    REFTEXT: %4 1



    Passer une chaîne composé de plusieurs lignes comme paramètre:
    --------------------------------------------------------------


    ceci est réalisable mais avec un petit contournement en utilisant réferencement textuel par l'expansion retardée du paramètre

    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
    @echo off
    setlocal enabledelayedexpansion
    
    (set #=^
    
    )
    
    set r=1!#!2!#!3 
    
    call :r r
    
    endlocal & pause
    exit /b
    
    
    :r
    setlocal enabledelayedexpansion
    echo !%1!
    endlocal

    mais maheureusement cette technique n'est pas supporté par l'expansion avec 'CALL'

    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
    @echo off
    setlocal Enabledelayedexpansion
    
    (set #=^
    
    )
    
    set r=1!#!2!#!3 
    
    call :r r
    
    endlocal & pause
    exit /b
    
    
    :r
    setlocal Disabledelayedexpansion
    call echo %%%1%%
    endlocal
    différence entre la variable %CD% et le paramètre %0:
    ----------------------------------------------------


    si vous voulez appelez votre fichier de commande alors il vaut mieux utiliser le paramètre %0 au lieu de la variable %CD% car la variable %CD% ne reflète pas toujours le placement de notre script et parceque le paramètre %0 est composable par des modificateurs spécials qui vont nous facilité la vie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CMD I> type G:\test.bat 
    @echo off
    
    PUSHD "%TEMP%"
    
    ECHO %CD%
    ECHO %~0
    ECHO %~dp0
    
    POPD
    goto :EOF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    D:\DOCUME~1\zaba\LOCALS~1\Temp
    G:\test.bat
    G:\

  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
    Points : 3 768
    Points
    3 768
    Par défaut
    Impressionant !!!

    Un grand merci pour ces exemples. Il me faudra encore quelques années pour
    digérer tou ça.
    ________________________________
    Un p'tit coup de pouce ça fait toujours plaisir, pensez-y !
    ________________________________

Discussions similaires

  1. [Batch] Quelques notions importantes sur la commande interne 'SET'
    Par I'm_HERE dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 08/11/2012, 19h15
  2. probléme sur les paramétres
    Par sidossa dans le forum iReport
    Réponses: 3
    Dernier message: 10/03/2008, 09h56
  3. [DragQueryFile] Explication sur les paramètres
    Par ero-sennin dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 19/09/2007, 15h54
  4. quelques petites questions sur les windows form
    Par natasha84 dans le forum C++/CLI
    Réponses: 22
    Dernier message: 25/05/2006, 23h14
  5. [VB6]Question bête sur les paramètres optionels
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/10/2005, 21h33

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