Problème pour ficher batch

bonjour j'ai un souci pour une programmation en fichier BATCH
j'ai un problème pour rejoindre le nom et l'affectation d'une variable par la valeur d'une autre, j'ai pour l'instant :

Pour déffinir la position d'affichage:

set /a pos0=%random%%%4
:er0
set /a pos1=%random%%%4
if %pos0% EQU %pos1% goto er0
:er1
set /a pos2=%random%%%4
if %pos0% EQU %pos2% goto er1
if %pos1% EQU %pos2% goto er1
:er2
set /a pos3=%random%%%4
if %pos0% EQU %pos3% goto er2
if %pos1% EQU %pos3% goto er2
if %pos2% EQU %pos3% goto er2

Pour l'affectation d'une constante

set /a nb0=%random%%%3
set /a nb1=%random%%%3
set /a nb2=%random%%%3
set /a nb3=%random%%%3

if %nb0%==0 set alea0=I
if %nb0%==1 set alea0=H
if %nb0%==2 set alea0=E

if %nb1%==0 set alea1=A
if %nb1%==1 set alea1=N
if %nb1%==2 set alea1=E

if %nb2%==0 set alea2=C
if %nb2%==1 set alea2=A
if %nb2%==2 set alea2=S

if %nb3%==0 set alea3=L
if %nb3%==1 set alea3=I
if %nb3%==2 set alea3=B

Et j'aimerai comme ceci

echo %alea0% %alea1% %alea2% %alea3%

Mais je voudrai remplacer le 0, 1, 2, 3 par %pos0%, %pos1%, %pos2%, %pos3%.

En gros afficher

echo %alea%pos0%% %alea%pos1%% %alea%pos2%% %alea%pos3%%

Cela me permetterait d'interchanger les positions aléatoirement de mes variables:
%alea0%, %alea1%, %alea2%, %alea3%.

svp help me!!!

31 réponses

Résumé de la discussion

Le sujet porte sur un script Batch qui doit afficher alea0 à alea3 selon des positions pos0 à pos3 générées aléatoirement et utilisées pour réorganiser l'affichage. Plusieurs réponses suggèrent d'utiliser l'expansion retardée et for pour accéder dynamiquement à des variables nommées par des indices, ou d'écrire un batch temporaire réassemblant les valeurs. D'autres considèrent que ce type d'indirection n'est pas directement faisable en batch et proposent des alternatives comme générer un second batch qui réécrit les affectations puis affiche le résultat. Une nuance utile est que pos0 à pos3 restent des indices entre 0 et 3 et que l'association via for et l'expansion retardée permet l'assemblage des chaînes selon l'ordre défini sans écrire de code additionnel.

Bobot (l’IA à votre service)
  1. Contributeur
    Je pense vraiment que ce que tu veux faire directement n'est pas possible en batch, qui est, il faut le reconnaitre, un interpréteur de script assez basique.
    Ce que tu cherches à faire tiens plus de la programmation, ce n'est pas le but de cmd de faire des jeux.

    Néanmoins, je pense que tu peut t'en sortir en passant par un second fichier bat.
    après avoir initialiser toutes tes variables, tu fais :
    echo set alea0=%alea0% > tmp.bat
    echo set alea1=%alea1% >>tmp.bat
    ...
    echo %alea%pos0%% %alea%pos1%% %alea%pos2%% %alea%pos3%%>>tmp.bat
    tmp.bat
    del tmp.bat

    Ce n'est pas très élégant mais ça devrais fonctionner.
    1. Contributeur
      hello
      C:> type bb.bat
      @echo off
      
      set alea0=0000000
      set alea1=1111111
      set alea2=2222222
      set alea3=3333333
      set alea4=4444444
      
      set x=2
      for /f "delims==, tokens=2" %%a in ('set alea%x%') do echo alea%x% %%a
      
      set x=4
      for /f "delims==, tokens=2" %%a in ('set alea%x%') do echo alea%x% %%a
      
      set x=0
      for /f "delims==, tokens=2" %%a in ('set alea%x%') do echo alea%x% %%a
      
      C:> bb
      alea2 2222222
      alea4 4444444
      alea0 0000000
      
      C:>
      1. je croix que les EXTENSIONS de commande sont désactivées ( car si ils ont activées donc pas d'affichage)
        1. pour moi si, quand j'écrie
          set /a pos0=0
          set alea0=M
          set alea%pos0%

          dans fichier batch et que je le lance une fenêtre cmd s'ouvre et m'indique
          alea0=M
          Appuyez sur une touche pour continuer...
          1. mais j'ai remarqué que vous tappez ceci directement à l'invite de commande (cmd) et pas sur un fichier batch
            parce que si celui est dans le batch il n'affiche rien
            1. Sinon j'ai trouvé ça :
              set /a pos0=0
              set alea0=M
              set alea%pos0%

              ça me donne

              alea0=M

              c'est ce que je veux mais sans le " alea0= "
              commen dois-je faire?
              1. Connais-tu le jeu de société Buggle. C'est ce jeu que je veux réaliser informatiquement
                1. Le problème est que %pos0% est un chiffre aléatoire compris entre 0 et 3. C'est sa valeur qui va définir la variable %alea*%, ce chiffre (0 ou 1 ou 2 ou 3) remplacera " * " de la variable %alea...%.
                  1. ou de faire ceci
                    echo la %pos0% est %alea0%
                    echo la %pos1% est %alea1%
                    ...etc
                    1. Exactement

                      Serais-tu enlever " alea0= " quand j'utilise :
                      set alea0
                      si tu sais c'est gagné pour moi
                      1. mais je croix que vous déja fait ceci
                        echo %alea0% %alea1% %alea2% %alea3%
                        et il affiche par ex :
                        A B H C
                        puis au dessous encore tappez :
                        echo %pos0% ...etc
                        el la résultat final est :
                        A B H C
                        0 1 2 3 par exemple suivant le variable ( aléatoirement )
                        1. Les valeurs de ces 2 variables sont des chiffres
                          alors que celles que j'attend sont des lettres
                          1. Non sa ne marche pas non plus.
                            j'ai peu être une autre solution, en utilisant la fonction SET:
                            si je fais :
                            set alea%pos0%
                            sa va me donné :
                            alea0=Valeur que j'attend
                            mais je ne ve pa que ce " alea0= " s'affiche
                            Je voudrais juste ma valeur.
                            1. echo alea%pos0% alea%pos1% alea%pos2% alea%pos3%
                              est ce que ca c'est bon car j'ai pas bien compris
                              1. Il faudrai
                                une des trois valeurs de %alea0% + une des trois valeurs de %alea1% + une des trois valeurs de %alea2% + une des trois valeurs de %alea3%

                                Et la valeur qui sera défini dans ces variables devront être afficher dans un ordre aléatoire.
                                Exemples avec toujours les mêmes valeurs pour les variables %alea0%, %alea1%, %alea2% et %alea3%.
                                ex:
                                C B A H ou
                                B H C A ou
                                B C A H ou
                                A B H C ou
                                etc...
                                • 1
                                • 2