Batch : aléatoire

Résolu
Bonjour,
Je voudrais que au démarrage de windows, un .bat s'ouvre automatiquement et écrive une phrase enregistrée dans ce .bat aléatoire (chaque démarrage une différente si possible).
Je voudrais un exemple du genre :
::::: edition du bat ::::::
phrases :
"ma phrase 1"=1; "ma phrase 2"=2; "ma phrase 3"=3...
démarrage : afficher 1
démarrage suivant : phrase précédente +1
démarrage suivant suivant : phrase précédente +1 (je pense qu'il faut faire comme ça)
si ce n'est pas possible de faire comme ça (une différente à chaque démarrage, la fonction aleatoire m'irai)
Merci de votre aide !

16 réponses

Résumé de la discussion

Le problème porte sur l’exécution automatique d’un fichier .bat au démarrage de Windows afin d’afficher une phrase choisie aléatoirement parmi celles contenues dans un fichier phrase.txt. Une proposition consiste à lire le fichier phrase.txt, compter le nombre total de phrases, puis sélectionner une ligne aléatoire avec une variable de tirage et afficher cette phrase. Il est recommandé de placer le fichier .bat et phrase.txt dans le même dossier et d’utiliser l’affichage direct ou une redirection vers un fichier pour consulter le résultat, selon le comportement souhaité. D’autres évoquent aussi l’usage de Task Scheduler pour lancer le script au démarrage ou à la connexion, afin de maîtriser les conditions d’exécution et l’affichage sans persister.

Bobot (l’IA à votre service)
  1. Tien voilà un truc que j'ai fait vite fait.
    Alors le fichier phrase.txt qui contient tout plein de phrase:
    Salut ça va ? 
    Bonjour a toi 
    Hello man !! 
    BlaBlaBli 
    Carrote ?


    Et puis le .bat qui lui comporte les commande.
    @echo off 
    setlocal enableDelayedExpansion 
    
    ::Nombre de phrases Total. 
    set phraseTotal=0 
    for /f %%i in ('type "phrase.txt"') do set /a phraseTotal+=1 
    
    
    ::Tirage au sort d'une des pharses. 
    call set /a LignePhrase=%%random%%%%%%%phraseTotal% 
    
    
    ::Extraction de la phrase. 
    set ligne=0 
    for /f "delims=""" %%i in ('type "phrase.txt"') do ( 
    if !ligne!==!LignePhrase! set phrase=%%i 
    set /a ligne+=1 
    ) 
    
    
    ::Affichage de la phrase 
    msg * %phrase%


    Voilà il faut que tu mette le phrase.txt et le .bat dans le dossier dossier, enfin a coter.

    Cordialement,
    Bilou.
    Il y a des jours faut pas m'chercher.
    Et y'a des jours tous les jours !
    1. J'espère que tu repasseras par là car je ne comprends pas bien ce que je dois faire pour que ça marche. J'ai copié-collé à partir de @echo off, jusque %phrase% et pourtant mon fichier ne marche pas.
      J'ai déjà remplacé la valeur du nombre total de phrase mais je ne vois pas ce que je dois faire en plus. (les deux fichiers sont biens dans le même dossier)

      Merci d'avance =D
    2. salut Cloud13 ;)

      il faut que l'extention de votre fichier est .bat ou .cmd et pas .txt
    3. Salut karirovax
      C'était déjà le cas, mais quand je le lance, il m'affiche :
      "Entrez message envoyer; CTRL+Z sur nouv. ligne pour terminer message, puis ENTREE"

      Et quoi que j'écrive, cmd.exe se ferme une fois que j'ai appuyé sur ctrl+z puis entrée, et je ne vois aucune modification nulle part.
    4. Re,

      ajoutez a la fin de votre batch la commande pause ( juste aprés la commande msg * %phrase% )
    5. Il y a du progrès =D
      Mais ça ne marche toujours pas ^^'
      Maintenant, il m'affiche "Erreur 1702 lors de l'obtention des noms de session"
      Je vais faire une recherche google pour cette fameuse erreur mais je veux bien être éclairé ici quand même ;)
  2. salut
    je croix pas qu'un seul batch permet d'afficher des méssages a chaque démarrage mais cela devient si le batch lui même est modifié
    pour les commandes
    AT /?
    For /?
    if /?
    echo /?
    Goto /?
    donc il vous reste d'améliorer les commandes
    1. Pourrais tu me donner un exemple ?
      Je viens de commencer le batch :S
      1. salut
        mais d'abord il faut commencer par les commandes que je vous donne ici !
        si vous faites des fautes donc c'est pas grave , j'essai de vous aider
    2. Merci je vais essayer =) ! =)

      EDIT :
      Merciii !! Pile ce qu'il me faut !!
      1. Petit problème : comment faire pour que les accents soit pris en compte ? là ça les transforme en de lettre bizarre :-/....
        1. donnez moi un exemple
        2. si j'ai bien compris par exemple le "é" dans le DOS est "Alt+0130"
      2. Alt+130 oui, mais dans mon fichier phrase.txt, il y a des accents par exemple :
        Il n'y a pas de théorie de l'évolution. Juste une liste d'espèces que Chuck Norris autorise à survivre.

        théorie : é
        espèces : è
        (Chucknorrisfacts)

        Et bien le message qui s'affiche ne met pas les é ou les è ou les à...ou ë ä â ê....
        il me met un U avec accent à la place.... comment faire ?!
        1. salut
          dans l'invite de commande tappez :
          echo é >mael9.txt
          ensuite
          echo è >>mael9.txt
          et voilà les deux lignes sont succéssivement les é et è
          donc les remplacer dans votre fichiers
        2. Je ne comprend pas bien...cet commande permetera d'afficher les é et les è correctement ?
        3. oui
          si je fait uniquement echo é donc vous voyez les résultats directement sur l'invite par contre l'ajoute du > c'est pour la redirection ver un fichier ( dans votre cas c'est mael9.txt ) pour par exemple voir les résultats sur votre bureau sous le nom coucou.txt donc tappez echo é >Bureau\coucou.txt
          dans la deuxieme line le double redirection (>>) est pour ne pas écraser la 1er par la 2eme résultat
          je pense que vous avez compris
        4. ???? quoi de nouveau
        5. Non mais ce n'est pas ce que je cherche....il ne faut pas que é et è s'écrivent dans un fichier...
          Ils sont dans mon fichier phrase.txt (ou il y a des phrase avec des accents comme dit plus haut) et lorsque je lance mon fichier .bat , il tire une phrase au hasard qui est dans phrase.txt , mais il n'affiche pas bien les accents ;)
          voilà mon problème,
          en espèrant avoir été plus clair,
          mael9
      3. Ok je vais essayer avec Powerbatch
        Mais en fait
        é = ,
        è = ?
        à = ...
        car quand je met dans l'invit de commande
        echo.J'espère qu'il sera présent à la maison. > cat.txt
        il mécrit ça :

        J'espSre qu'il sera pr'sent ... la maison....
        1. salut
          tappez
          graftabl dans l'invite de commande et me dire si le code est 720
      4. Non, c'est 850
        1. donc c bon
          j'ai remarqué qu'il n'y a pas de problème
          vous dite :
          echo.J'espère qu'il sera présent à la maison. > cat.txt
          il mécrit ça

          J'espSre qu'il sera pr'sent ... la maison....
          donc c bon car une autre execution de votre 1er exmple sur le fichier cat.txt au lieu de phrase.txt il marche trés bien
          je croix que vous me comprenez pas bien ce que j'ai dit
      5. Reuh mael9,

        Avec le code que je t'ai donner normalement les caractères devrait s'afficher normalement car il s'affiche dans une boite de dialogue.

        Toi ceux que tu fait, c'est que tu écrit dans un fichier texte en passant par le DOS, pour ça il faut faire:
        Dans PowerBatch quand tu tape un é il te met un ,
        Et bah copie le , pour le remplace a la place des é dans ton bat ouvert avec le Bloc-Note.
        Ou sinon tu enregistre directement avec PowerBatch

        Cordialement,
        Bilou.
        Il y a des jours faut pas m'chercher.
        Et y'a des jours tous les jours !
        1. oui c juste que je lui dit
          il faut que lui remplace le é par , et ainsi de suite
      6. Ben topic résolu !
        J'avais déja Powerbatch et j'avais jamais remarqué qu'il transformais les lettres directement les accents u_u' !
        1. De rien de t'avoir aider.
          Si tu a d'autres question n'hésite pas a poster.

          Ps: évite les double post c'est mal vue.

          Cordialement,
          Bilou.
          Il y a des jours faut pas m'chercher.
          Et y'a des jours tous les jours !
          1. oui vous avez raison
            donc félicitation mael9
            et si vous avez d'autres remarques/qu'estions ..etc donc on est là pour vous
            cordialement ;)
        2. Oui dsl mais je pensais mettre topic résolu dans un autre message ^^'
          Bye ;)
        3. Topic de nouveau non résolu,
          comment faire le même script sous linux(ubuntu) ? il ne connait pas certaines commande... setlocal...@echo off..
          1. Ok merci !
          2. Re,
            de rien ;)
        4. J'ai un script long de 23 lignes (sans compter les commentaires) (modifié)
          @echo off   
          set phrase1=Premier phrase   
          set phrase2=Deuxieme phrase   
          set phrase3=Troisieme phrase   
          set phrase4=blablabla   
          set phrase5=Hello world   
          set phrase6=...   
          set phrase7=blablabla   
          set phrase8=blablabla   
          set phrase9=xox   
          set phrase10=dix  
          ::debut partie modifie 
          set /a nombre=(%random%%%10)+1
          ::fin partie modifie 
          if %nombre%==1 echo %phrase1%   
          if %nombre%==2 echo %phrase2%   
          if %nombre%==3 echo %phrase3%   
          if %nombre%==4 echo %phrase4%   
          if %nombre%==5 echo %phrase5%   
          if %nombre%==6 echo %phrase6%   
          if %nombre%==7 echo %phrase7%   
          if %nombre%==8 echo %phrase8%   
          if %nombre%==9 echo %phrase9%   
          if %nombre%==10 echo %phrase10%   
          pause >nul


          Entre debut partie modifie et fin partie modifie l'ancien code est
          if not exist save.txt echo 1>save.txt
          set /p nombre=<save.txt
          1. Qui marche sous windows..pas sous linux :-/ mais qui ne permet pas du "aléatoire" et à quoi sert le fichier "save.txt" ?
            1. salut mael9

              le nombre aléatoire dans le bash linux c la commande RANDOM , donc essayez avec le help du commande RANDOM --help

              je répond pour le fichier save.txt

              dans la ligne :
              if not exist save.txt echo 1>save.txt
              si le fichier save.txt n'existe pas donc afficher un "1" et l'enregistre sur le fichier save.txt

              set /p nombre= <save.txt
              la commande set /p nombre= permet d'attendre la saisie a partir du clavier mais il ya aprés cette commande le <save.txt dans ce cas on sais que le numéro 1 est stocké dans ce fichier et tandis qu'il ya une redirection inversé ( le < inferieur) donc le contenue de ce fichier est celui de l'entrée pour la commande SET /P nombre= c-à-d si comme si on a tappé directement le numéro a partir du pavé numérique de notre clavier 1
            2. Ok, merci !
            3. de rien ;)
            4. Le script est modifié :)
            5. merci je vais essayer
              EDIT :
              Avec ce code voici l'erreur :
              /home/ubuntu/Desktop/fichier.bat: line 1: @echo : commande introuvable
              /home/ubuntu/Desktop/fichier.bat: line 12: Erreur de syntaxe près du symbole inattendu « ( »
              /home/ubuntu/Desktop/fichier.bat: line 12: 'set /a nombre=(%random%%%10)+1 '
              ubuntu@ubuntu:~$ /home/ubuntu/Desktop/fichier.bat