Batch : aléatoire
RésoluCARCY -
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 !
- Batch : aléatoire
- Fichier batch - Guide
- Batch converter - Télécharger - Photo & Graphisme
- Batch installation id ✓ - Forum Autoit / batch
- Echo off batch ✓ - Forum Autoit / batch
- Batch renommer une partie du nom de plusieurs fichiers ✓ - Forum Autoit / batch
16 réponses
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.
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 !
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionIl 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 ?!
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
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
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
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 !
J'avais déja Powerbatch et j'avais jamais remarqué qu'il transformais les lettres directement les accents u_u' !
comment faire le même script sous linux(ubuntu) ? il ne connait pas certaines commande... setlocal...@echo off..
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
@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
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
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
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
il faut que l'extention de votre fichier est .bat ou .cmd et pas .txt
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.
ajoutez a la fin de votre batch la commande pause ( juste aprés la commande msg * %phrase% )
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 ;)