Batch : aléatoire

Résolu
mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   -  
 CARCY -
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.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. cs-bilou Messages postés 836 Statut Membre 164
     
    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 !
    3
    1. Cloud13
       
      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
      0
    2. karirovax Messages postés 3584 Statut Membre 215
       
      salut Cloud13 ;)

      il faut que l'extention de votre fichier est .bat ou .cmd et pas .txt
      0
    3. Cloud13
       
      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.
      0
    4. karirovax Messages postés 3584 Statut Membre 215
       
      Re,

      ajoutez a la fin de votre batch la commande pause ( juste aprés la commande msg * %phrase% )
      0
    5. Cloud13
       
      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 ;)
      0
  2. karirovax Messages postés 3584 Statut Membre 215
     
    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
    0
  3. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
     
    Pourrais tu me donner un exemple ?
    Je viens de commencer le batch :S
    0
    1. karirovax Messages postés 3584 Statut Membre 215
       
      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
      0
  4. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
     
    Merci je vais essayer =) ! =)

    EDIT :
    Merciii !! Pile ce qu'il me faut !!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
     
    Petit problème : comment faire pour que les accents soit pris en compte ? là ça les transforme en de lettre bizarre :-/....
    0
    1. karirovax Messages postés 3584 Statut Membre 215
       
      donnez moi un exemple
      0
    2. karirovax Messages postés 3584 Statut Membre 215
       
      si j'ai bien compris par exemple le "é" dans le DOS est "Alt+0130"
      0
  7. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
     
    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 ?!
    0
    1. karirovax Messages postés 3584 Statut Membre 215
       
      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
      0
    2. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
       
      Je ne comprend pas bien...cet commande permetera d'afficher les é et les è correctement ?
      0
    3. karirovax Messages postés 3584 Statut Membre 215
       
      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
      0
    4. karirovax Messages postés 3584 Statut Membre 215
       
      ???? quoi de nouveau
      0
    5. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
       
      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
      0
  8. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
     
    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....
    0
    1. karirovax Messages postés 3584 Statut Membre 215
       
      salut
      tappez
      graftabl dans l'invite de commande et me dire si le code est 720
      0
  9. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
     
    Non, c'est 850
    0
    1. karirovax Messages postés 3584 Statut Membre 215
       
      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
      0
  10. cs-bilou Messages postés 836 Statut Membre 164
     
    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 !
    0
    1. karirovax Messages postés 3584 Statut Membre 215
       
      oui c juste que je lui dit
      il faut que lui remplace le é par , et ainsi de suite
      0
  11. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
     
    ok j'essaie ;)
    EDIT : ahhhh ça marche :P merci ^^ !
    0
  12. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
     
    Ben topic résolu !
    J'avais déja Powerbatch et j'avais jamais remarqué qu'il transformais les lettres directement les accents u_u' !
    0
  13. cs-bilou Messages postés 836 Statut Membre 164
     
    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 !
    0
    1. karirovax Messages postés 3584 Statut Membre 215
       
      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 ;)
      0
  14. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
     
    Oui dsl mais je pensais mettre topic résolu dans un autre message ^^'
    Bye ;)
    0
    1. karirovax Messages postés 3584 Statut Membre 215
       
      oui
      0
  15. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
     
    Topic de nouveau non résolu,
    comment faire le même script sous linux(ubuntu) ? il ne connait pas certaines commande... setlocal...@echo off..
    0
    1. karirovax Messages postés 3584 Statut Membre 215
       
      Re, salut
      dans ubuntu il ya le shell bash ( il n y a pas @ )

      pour plus d'infos va voir le site de zéro
      https://openclassrooms.com/fr/courses
      0
    2. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
       
      Ok merci !
      0
    3. karirovax Messages postés 3584 Statut Membre 215
       
      Re,
      de rien ;)
      0
  16. theo7777 Messages postés 117 Statut Membre 42
     
    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
    0
  17. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
     
    Qui marche sous windows..pas sous linux :-/ mais qui ne permet pas du "aléatoire" et à quoi sert le fichier "save.txt" ?
    0
    1. karirovax Messages postés 3584 Statut Membre 215
       
      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
      0
    2. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
       
      Ok, merci !
      0
    3. karirovax Messages postés 3584 Statut Membre 215
       
      de rien ;)
      0
    4. theo7777 Messages postés 117 Statut Membre 42
       
      Le script est modifié :)
      0
    5. mael9 Messages postés 373 Date d'inscription   Statut Membre Dernière intervention   30
       
      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
      0