2013-08-21 4 views
3

En utilisant un fichier .bat, je sais comment faire écho un nombre aléatoire avec% Random%. Comment puis-je définir une certaine plage aléatoire de% Random% e.g. 50-100? Oh, et j'ai un système de points qui indique au début: SET/A MAINSCORE = 0 Comment puis-je définir ce nombre aléatoire à ajouter/soustraire du MainScore? Merci.Fichier CMD-Batch Simple Random

Répondre

0

cela devrait aider:

# If you need a random int within a certain range, use the 'modulo' operator. 
# This returns the remainder of a division operation. 

RANGE=500 

echo 

number=$RANDOM 
let "number %= $RANGE" 
#   ^^ 
echo "Random number less than $RANGE --- $number" 

# If you need a random integer greater than a lower bound, 
#+ then set up a test to discard all numbers below that. 

FLOOR=200 

number=0 #initialize 
while [ "$number" -le $FLOOR ] 
do 
    number=$RANDOM 
done 
echo "Random number greater than $FLOOR --- $number" 
echo 

# Let's examine a simple alternative to the above loop, namely 
#  let "number = $RANDOM + $FLOOR" 
# That would eliminate the while-loop and run faster. 
# But, there might be a problem with that. What is it? 

# Combine above two techniques to retrieve random number between two limits. 
number=0 #initialize 
while [ "$number" -le $FLOOR ] 
    do 
    number=$RANDOM 
    let "number %= $RANGE" # Scales $number down within $RANGE. 
    done 
echo "Random number between $FLOOR and $RANGE --- $number" 

Taken from here: http://tldp.org/LDP/abs/html/randomvar.html

Ensuite, une fois que vous avez le numéro de $, vous pouvez juste faire quelque chose comme: num = expr $number + $MAINSCORE

espoir que aide.

+0

Merci! Cela aide – user2507295

+0

@NabeelSaad ce que vous avez posté est un script shell bash. L'OP a posé des questions sur CMD-batch, ce qui est une indication assez claire qu'il utilise Windows. Ceci est une réponse trompeuse pour une question étiquetée [tag: fichier batch]. –

6

Le %RANDOM% renvoie un nombre compris entre 0 et 32767. Pour réduire cette plage, utilisez l'opérateur modulo et l'addition ou la soustraction pour compenser le résultat. Exemple:

@set /a bottomlimit = 50 
@set /a upperlimit = 100 
@set /a result = %bottomlimit% + %RANDOM% %% (%upperlimit% - %bottomlimit% + 1) 
@echo %result% 
+0

Maintenant, c'est celui que je cherche. Merci! – user2507295

+2

@GaborOrosz Vous devez ajouter '+ 1' entre parenthèses, sinon la limite supérieure ne sera jamais générée (l'opérateur modulo produit un résultat ** inférieur ** à son deuxième argument). Essayez avec 'bottomlimit = 1' et' upperlimit = 2' pour voir clairement le problème. –

+0

@LorenzoDonati Vous avez raison! c'est produire le reste de la division qui est toujours moins que le diviseur bien sûr. Désolé à ce sujet ... –

1
@echo off 
set min=5 
set max=10 
set /a range=max-min +1 
set /a rnd=%random% %%%range% +%min% 
echo %rnd% 
pause 

Personnellement, je vraiment ma façon de le faire
cela passera par une # entre 5 et 10
et le meilleur de tous, son propre. merci

0

programme simple qui vous permet de définir la quantité de numéros pour un programme de choix facile ...

:loop 
cls 
goto before 

:before 
@echo off 
setlocal delayexpansion 
cls 
@mod con: clos=80 lines=25 
title Number Picker 
color 0a 
cls 
goto menu 

:menu 
cls 
echo. 
echo Number Picker 
echo. 
set/p input= "Number: " 
if %input%== goto show 

:show 
set /a bottomlimit = 0 
set /a upperlimit = %input% 
set /a result = %bottomlimit% + %random% %% (%upperlimit% - %bottomlimit% +1) 
echo. 
echo Random Number: %result% 
echo. 
echo Press 'Y' to close press 'N' to go to menu... 
echo. 
set/p input= "Exit: " 
if %input%==y exit 
if %input%==n goto loop