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 :

Aide pour un bout de code


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut [résolu] Aide pour un bout de code
    Salut,

    J'aimerais savoir pourquoi ce bout de code ne fonctionne pas :

    echo * Tapez le ou les num‚ros votre choix, avec un point entre chaque nombre
    echo (sans espace), ou tapez "all" pour tous les choisir, et appuyez sur ENTREE...
    echo.
    echo.
    set /p choix=""

    cd _resources
    :decompoz
    set numbers=%choix%
    set TMP="%numbers:.=" "%"
    call :getit %TMP%
    :getit
    if "%~1" neq "" (
    set match=%~1
    echo set target=#truc%match%#>temp.bat
    call switch\switch.exe "temp.bat" "#" "%"
    call temp.bat

    echo %target%
    shift
    goto getit
    )
    pause
    (même code, mais screenshot Notepad++ avec des annotations : http://img190.imageshack.us/img190/6...0516153817.jpg

    En gros, voici le fonctionnement :
    - on tape un chiffre ou une série de chiffres séparés de points
    - le code décortique les chiffres entre chaque point
    - "truc~n" correspond à des variables fabriquées plus en amont (non visible ici).
    - donc suivant ce qu'on a tapé comme chiffre, je voudrais que "target" prennent comme valeur la valeur de la variable "truc~le n° décortiqué".

    Exemple :
    - plus haut on a affiché une liste de softs : 1-MSN, 2-Firefox, 3-Ccleaner
    - on en a profité pour fabriquer des variables : truc1=MSN, truc2=Firefox, etc
    - l'utilisateur tape par exemple "1.3", alors le script décortique "1" et "3".
    - Il doit ensuite fabriquer une variable "target" qui est égale à "truc1", puis plus tard qui est égale à "truc3"
    - entre temps il se servira de "target" pour réaliser une opération qu'il est futile d'illustrer ici.

    Astuces que j'ai faite :
    - comme je n'arrivais pas à conceptualiser le bordel, j'ai bidouillé de quoi inscrire la variable "target" dans un fichier où elle prend la valeur de "truc~numéro décortiqué"
    - puis de remplacer ensuite les "#" par des "%"
    - ensuite on a bien "set target=%truc1%" (par exemple) dans le fichier temp.bat, qu'on appelle pour définir cette variable.

    - enfin on fait ce dont on a besoin avec la variable (non illustré ici).

    Problème rencontré (image de la console de commandes) :
    http://img34.imageshack.us/img34/587...0516152411.jpg

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut
    Si vou pouviez simplement m'indiquer comment réaliser ceci (qui ne marche pas sous cette forme) :

    - set target=%truc%match%%

    je serais libéré d'un gros poids -_- (quand même deux heures que je bloque sur ce fichu code qui bug sans explication rationnelle...).

    Surtout (le plus important pour ma santé mentale) : si quelqu'un pouvait m'expliquer très clairement pourquoi mon code actuel ne marche pas, ça serait cool. Parce que subir ce genre de plan à longueur de temps, ça tape sur le système...

    A défaut d'explications je serais obligé d'affirmer ma thèse comme quoi les langages (quels qu'ils soient) sont constitués d'absurdités, ou bien qu'ils ne le sont pas mais qu'une mystérieuse force obscure se joue de moi pour me faire devenir dingue...

  3. #3
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Salut DeVit,

    L'effort d'explication que tu as fait te donne droit à ce qui suit, si bien sûr, c'est ça que tu voulais.
    J’y ai aussi ajouté quelques garde-fous histoire de t'empêcher de
    Citation Envoyé par DeVit Voir le message
    devenir dingue...
    Aussi un peu de lecture te fera le plus grand bien.

    Pense également à ne pas utiliser le nom de variables réservées telles que «TMP» dans tes scripts.

    enjoy;

    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
    set truc1=msn
    set truc3=Ccleaner
    set /p choix=Pour tester, tapez 1.3:     
    :decompoz
    set formchoix=%choix:.= %
    call :getit %formchoix%
    goto fin
    :getit
    if "%1"=="" goto :eof
    call set target=%%truc%1%%
    if not "%target%"=="" echo %target%
    shift
    goto getit
    :fin
    pause

  4. #4
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Oui, C'est évident I'm_HERE, tu as tout à fait raison.

    Cependant l'essence même de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set formchoix=%choix:.= %
    c'est d'illustrer mes propos:
    Citation Envoyé par maxim_um Voir le message
    Pense également à ne pas utiliser le nom de variables réservées telles que «TMP» dans tes scripts.
    mais ça, ce n’est pas le fond du problème.

    Le point clef, c'est qu'il devait utiliser l'«expansion retardée» ou encore faire appel à la commande «call» pour forcer une double lecture. Mais à ce stade, je suppose qu'il l'a compris.

    Je remarque aussi, à mon grand regret, que tu as supprimé ton précédent poste. C'est fort dommage, car il aurait pu servir à de nombreuses personnes surtout qu'il n'était pas vide de sens.

  5. #5
    Membre émérite
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Par défaut
    Salut I'm_HERE

    Ces objectifs ne sont pas clairement définis

    Citation Envoyé par DeVit Voir le message
    - enfin on fait ce dont on a besoin avec la variable (non illustré ici).
    et dans cette mesure, il faut se garder de trop modifier son script de départ.

    En effet, en produisant un script le plus fidèle possible au sien, bien entendu ça nécessite un peu plus d'attention, c'est déjà respecter le travail qu'il a accompli. Par la même occasion, cela lui permet d'entreprendre une étude comparative et ainsi répondre à son besoin primaire qui était ici de comprendre. Enfin, c'est aussi une manière encourageante de lui dire qu'il n'était pas très loin, en évitant de lui chambouler tous ses repères.

    En ce qui concerne la démarche qu'il a entreprise, c'est à dire l'usage de fonctions (ou plus exactement pseudo-fonctions), et bien tu conviendras que ça offre bien plus de flexibilité que ce que tu viens de produire, surtout s'il est amené à faire des traitements (lancement de profile, journalisation, nettoyage ...) avant ou après le lancement des applications en questions. Mais comme je l'ai dit plus haut, ces objectifs ne sont pas clairement définis, disons alors que le potentiel est là.

    Comprends bien que je ne veux pas que cela t'empêche de poster, c'est juste pour que tu en sois conscient. Outre les points cités plus haut, ce que tu viens de faire est très bien parce qu'il y a un réel mérite là-dessous, ne serait-ce que pour les magnifiques captures d'écran dont nous a gratifié Devit. Pour d'autres qui ne font aucun effort, c'est plus discutable, mais là, bien sûr, ça n'engage que moi.

    Merci à toi I'm_HERE.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 102
    Par défaut
    Merci à vous !
    En effet je vais prendre la réponse de maxim_um qui est plus proche de ma structure originelle, mais merci à toi Im_Here pour ton soutient (sur d'autre de mes posts notament).
    call set target=%%truc%1%%
    Depuis le temps que je cherchais ce genre de chose, je ne t'explique même pas comment ça va me soulager à l'avenir !

    Je vais lire attentivement ce que tu m'as linké, maxim_um, et voir si ça m'aide à comprendre mon erreur

  7. #7
    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 maxim_um et DeVit,

    @maxim_um: j'ai lu le message de DeVit (que je tiens à le félicité de son effort) mais honnêtement j'ai pas compris son intention, vu qu'il nous a pas montré tout son code, alors j'avais fait un code similaire au sien qui répond à son problème:
    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
    @echo off
    setlocal enabledelayedexpansion
    set truc1=msn
    set truc2=firefox
    set truc3=Ccleaner
    
    set /p "choix="     
    call :getit "%choix:.=" "%" 
    :-
    :getit
    if "%~1" neq "" (
    set target=!truc%~1!
    echo !target!
    shift
    goto getit
    )
    pause
    goto:eof
    mais lorsque t'as posté ton code, j'ai "compris" que c'était un menu, alors je me suis dit qu'il y a plus simple et plus "flexible" car au lieu de traiter la variable target=[truc1 | truc2 | trucN] à chaque tour de boucle, on peut le faire avec un targetN=[trucN] pour rendre chaque %target% indépendante de l'autre : enfin c'est ce que j'ai compris du code posté...

    @DeVit: belles "captures d'écran" mais elles ne reflètent pas le but du code, si c'est seulement un menu à choix multiples alors il y a plus simple mais si c'est autre choses alors..

    pour le bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    :decompoz
    set formchoix=%choix:.= %
    call :getit %formchoix%
    tu peux faire simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    call :getit %choix:.= %

Discussions similaires

  1. Aide pour l'accomplissement du code
    Par étoile de mer dans le forum Débuter
    Réponses: 1
    Dernier message: 14/07/2008, 17h05
  2. aide pour faire marcher ce code
    Par ousmane158 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 30/04/2008, 10h51
  3. Outil d'aide pour le refactoring de code
    Par progfou dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 14/03/2008, 14h04
  4. Demande d'aide pour un problème de code source sur devC++
    Par Rickantonais dans le forum Débuter
    Réponses: 28
    Dernier message: 01/08/2007, 14h09
  5. [VBA-E] Aide pour simplification de mon code.
    Par pauletta22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/05/2006, 11h34

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