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 :

batch ms-dos random


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 21
    Par défaut batch ms-dos random
    bonjour,

    La variable %random% réagit étrangement lorsqu'on la combine à un modulo dans un batch.

    dans un invite de commande, ceci marche très bien :

    Elle retourne un nombre pseudo aléatoire compris entre 0 et 1.

    Dans un batch du type ci-dessous, les nombres générés sont de l'ordre de plusieurs milliers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    
    set /a n="%random%%2"
    echo n=%n%
    
    pause
    J'ai créé un petit batch qui calcule des stats pour comparer des nombres générés avec et sans modulo :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    @echo off
    setlocal enabledelayedexpansion
    echo tirage du %time%>>c:\random.log
    set /a m1="0"
    set /a m2="0"
    for /l %%i in (1,1,10) do (
    set /a n="!random!%2"
    echo %%i : '!n!'
    set /a m1+="!n!"
    set /a m_1="!n!/10"
    )
    echo moyenne1=%m_1%
    echo modulo 2 :	moyenne1=%m_1%>>c:\random.log
    
    echo -----
    
    for /l %%i in (1,1,10) do (
    set /a n="!random!"
    echo %%i : '!n!'
    set /a m2+="!n!"
    set /a m_2="!m2!/10"
    )
    echo moyenne2=%m_2%
    echo no modulo :	moyenne2=%m_2%>>c:\random.log
    
    pause
    voici le genre de résultat que j'obtiens :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    tirage du 10:30:20,42
    modulo 2 :	moyenne1=2907
    no modulo :	moyenne2=17915
    tirage du 10:30:23,26
    modulo 2 :	moyenne1=1062
    no modulo :	moyenne2=16653
    tirage du 10:30:25,56
    modulo 2 :	moyenne1=3110
    no modulo :	moyenne2=16904
    tirage du 10:30:37,35
    modulo 5 :	moyenne1=2285
    no modulo :	moyenne2=11856
    tirage du 10:30:39,59
    modulo 5 :	moyenne1=1056
    no modulo :	moyenne2=12106
    tirage du 10:30:41,60
    modulo 5 :	moyenne1=3103
    no modulo :	moyenne2=15634
    tirage du 10:30:52,89
    modulo 10 :	moyenne1=28942
    no modulo :	moyenne2=15375
    tirage du 10:30:54,85
    modulo 10 :	moyenne1=16646
    no modulo :	moyenne2=15626
    tirage du 10:30:56,25
    modulo 10 :	moyenne1=4349
    no modulo :	moyenne2=15877
    On voit que le modulo a une influence par rapport au random sans modulo. Entre modulo 2 et modulo 5, la différence n'est pas flagrante...

    Comment fait-on pour générer un nombre entre 0 et 10 par exemple, dans un batch alors?

  2. #2
    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
    Citation Envoyé par blackaagony Voir le message
    bonjour,

    La variable %random% réagit étrangement lorsqu'on la combine à un modulo dans un batch.

    dans un invite de commande, ceci marche très bien :

    Elle retourne un nombre pseudo aléatoire compris entre 0 et 1.

    Dans un batch du type ci-dessous, les nombres générés sont de l'ordre deplusieurs milliers.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off
    
    set /a n="%random%%2"
    echo n=%n%
    
    pause
    ...

    Comment fait-on pour générer un nombre entre 0 et 10 par exemple, dans un batch alors?

    Salut

    La ligne que tu tapes dans une invite de commande est de la forme suivante:
    Dans un fichier batch la même commande s'écrit comme ceci:
    Le symbole % doit être dédoublé pour obtenir le modulo lors du calcule,
    dans le cas contraire %2 est interprété comme étant un paramètre vide,
    d'où les erreurs que tu as rencontrées.

    script exemple:

    Rand.cmd
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    :deb
    cls
    set /a n=%random% %% 2
    echo %n%
    pause
    goto deb
    Ainsi, pour afficher un nombre entre 0 et 9 (10 possibilités) depuis un batch file:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ...
    set /a n=%random%%%10
    echo %n%
    ...
    ou

    voilà, voilà


Discussions similaires

  1. fichier batch ms dos
    Par luc1362 dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 03/02/2012, 05h11
  2. Réponses: 4
    Dernier message: 02/08/2011, 17h01
  3. [Batch] Comment remplacer le character = dans un script batch ms dos ?
    Par Battosaiii dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 18/05/2010, 20h23
  4. Réponses: 6
    Dernier message: 02/07/2008, 09h06
  5. [BATCH] Commande DOS pour partager ?
    Par tonf dans le forum Windows
    Réponses: 2
    Dernier message: 01/12/2006, 15h31

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