Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
Menu a choix Multiple
Auteur Message
Répondre en citant
Message Menu a choix Multiple 
Bonjour,
j'ai trouve sur internet un code en dos .Mais avant de l'exploiter j'aimerais comprendre certains passages.
Pourriez vous m'aider ?
Merci

Voici le prog:


Code:
:: Hide Command and Set Scope
@echo off
setlocal EnableExtensions

:: Customize Window
title My Menu

:: Menu Options
:: Specify as many as you want, but they must be sequential from 1 with no gaps
:: Step 1. List the Application Names
set "App[1]=One"
set "App[2]=Two"
set "App[3]=Three"
set "App[4]=Four"
set "App[5]=Five"
set "App[6]=All Apps"

:: Display the Menu
set "Message="
:Menu
cls
echo.%Message%
echo.
echo.  Menu Title
echo.

 Q1:   Ici que fait le call echo ?

set "x=0"
:MenuLoop
set /a "x+=1"
if defined App[%x%] (
    call echo   %x%. %%App[%x%]%%
    goto MenuLoop
)
echo.

:: Prompt User for Choice
:Prompt
set "Input="
set /p "Input=Select what app:"

Q2 : Je ne comprends pas les filtres fait sur la varible Input ?
        est ce l'équivalent 'un filtre qui utilise des expressions régulières ?

:: Validate Input [Remove Special Characters]
if not defined Input goto Prompt
set "Input=%Input:"=%"
set "Input=%Input:^=%"
set "Input=%Input:<=%"
set "Input=%Input:>=%"
set "Input=%Input:&=%"
set "Input=%Input:|=%"
set "Input=%Input:(=%"
set "Input=%Input:)=%"
:: Equals are not allowed in variable names
set "Input=%Input:^==%"
call :Validate %Input%

:: Process Input
call :Process %Input%
goto End


:Validate
set "Next=%2"
if not defined App[%1] (
    set "Message=Invalid Input: %1"
    goto Menu
)

Q3: Intérêt de defined next shift ?

if defined Next shift & goto Validate
goto :eof


:Process
set "Next=%2"
call set "App=%%App[%1]%%"

:: Run Installations
:: Specify all of the installations for each app.
:: Step 2. Match on the application names and perform the installation for each
if "%App%" EQU "One" echo Run Install for App One here
if "%App%" EQU "Two" echo Run Install for App Two here
if "%App%" EQU "Three" echo Run Install for App Three here
if "%App%" EQU "Four" echo Run Install for App Four here
if "%App%" EQU "Five" echo Run Install for App Five here
if "%App%" EQU "All Apps" (
    echo Run Install for All Apps here
)

:: Prevent the command from being processed twice if listed twice.
set "App[%1]="
if defined Next shift & goto Process
goto :eof


:End
endlocal
pause >nul


En bref ce programme est pour moi dans son ensemble un mystère.
le résoudre me ferai à coup sur progresser.

Merci pur votre aide.




EDIT LOGAN : Balises [CODE]



Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message Menu a choix Multiple 
Salut Okay

Voici les réponses à tes questions dans l'ordre :

R1 : Le 'call echo' à été utilisé pour permettre de créé une expansion retardée (d'ailleurs c'est un peu illogique d'avoir fait ça car apparemment le développeur connaissait la commande 'setlocal' ...)

R2 : Ici le programmeur retire des caractères spéciaux dans la variable Input pour éviter de créé des crash avec les commandes utilisant %Input% (ici aussi, choix assez 'illogique', quoi que c'est un choix compréhensible, il aurait pu tout simplement ajouter des guillemets autour de %Input% pour échapper ces caractères ...)

R3 : Le 'If defined' permet de savoir si une variable existe (si elle à été créé et si elle a une valeur quelconque),ici la variable à tester est %Next% (sauf que ici on ne met pas de % car on ne veux pas la valeur de la variable, mais seulement son nom) si c'est le cas le programme effectue la commande 'Shift' pour déplacer les arguments de place, puis il retourne à :Validate

En résumer ce code est assez mal optimiser et a des choix assez originaux (de la part du développeur)



En espérant t'avoir éclairer Wink Okay
Si tu as d'autres questions n'hésite pas Wink




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message Menu à choix Multiple 
Merci Xenoxis pour ton intérêt et les réponses données.
Mais malheureusement je ne comprends toujours pas comment la ligne set "Input=%Input:^=% et les autres qui suivent
peuvent permettre de retirer un caractère( et dans ce cas là quel est le caractère retiré?) à la valeur rentrer par l'utilisateur dans Input ?
Je ne vois aucune référence à un tuto qui pourrait m'aider à comprendre cette technique.

Encore Merci.





EDIT LOGAN : Fail balises [QUOTE]



Répondre en citant
Message Menu a choix Multiple 
Ah je crois que tu t'es un peu fail ^^

Sinon voici un site avec de très bonnes explications (en anglais par contre, mais c'est le plus complet ^^)




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message Menu a choix Multiple 
Hello Razz

Ton Set Input=%Input:^=% se "lirait" comme suit : Affecter à Input sa propre valeur en remplaçant les ^ par "" (rien).


Donc en fait pour mieux comprendre : SET VARIABLE=%VARIABLE: [CARACTÈRE A REMPLACER] = [CARACTÈRE DE REMPLACEMENT]%

Donc si ta variable contient "coco" et que tu affectes par exemple Set VAR=%VAR:c=t%, la variable contiendra derrière ça : "toto".



Si tu as d'autres questions n'hésite pas, bye Okay




______________________________________________________
│Øδ@π.
Visiter le site web du posteur Skype
Répondre en citant
Message Menu à choix multiple 
Merci Xenoxis et Logan pour vos explications.

Une dernière chose avant de conclure :
Xenoxis quand tu écris:
"il aurait pu tout simplement ajouter des guillemets autour de %Input% pour échapper ces caractères "
Pourrais tu donner la ligne de code correspondante ?

Merci.



Message Menu a choix Multiple 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch