web-dev-qa-db-fra.com

Comment utiliser au hasard dans le script BATCH?

Comment utiliser au hasard dans le script BATCH?

92
IAdapter

%RANDOM% vous donne un nombre aléatoire compris entre 0 et 32767.

En utilisant une expression comme SET /A test=%RANDOM% * 100 / 32768 + 1, vous pouvez modifier la plage comme bon vous semble (ici, la plage est [1… 100] au lieu de [0… 32767]).

105
mousio

% RANDOM% vous donne un nombre aléatoire compris entre 0 et 32767.

Vous pouvez contrôler la plage du numéro avec:

set /a num=%random% %%100

- produira un nombre compris entre 0 et 99.

Celui-là:

set /a num=%random% %%100 +1

- produira un nombre compris entre 1 et 100.

47
GaryNg

Vous voudrez probablement obtenir plusieurs nombres aléatoires et pourrez éventuellement spécifier une plage différente pour chacun, vous devez donc définir une fonction. Dans mon exemple, je génère des nombres de 25 à 30 avec call:Rand 25 30. Et le résultat est dans Rand_NUM après la fermeture de cette fonction.

@echo off & setlocal EnableDelayedExpansion

for /L %%a in (1 1 10) do (
        call:Rand 25 30
        echo !Rand_NUM!
)

goto:EOF

REM The script ends at the above goto:EOF.  The following are functions.

REM Rand()
REM Input: %1 is min, %2 is max.
REM Output: Rand_NUM is set to a random number from min through max.
:Rand
SET /A Rand_NUM=%RANDOM% * (%2 - %1 + 1) / 32768 + %1
goto:EOF
15
indiv
@echo off & setLocal EnableDelayedExpansion

for /L %%a in (1 1 100) do (
echo !random!
)
4
Evgeny Gavrin
set /a number=%random% %% [maximum]-[minimum]

exemple " 

set /a number=%random% %% 100-50

donnera un nombre aléatoire compris entre 100 et 50. Assurez-vous de n'utiliser qu'un seul signe de pourcentage comme opérande si vous n'utilisez pas la ligne dans un script batch!

3
Jacob

Vous pouvez le faire de cette façon, ce qui n'exige pas EnableDelayedExpansion

:choosenamea
cls
set /a choosemname=%random%

if %choosemname% GTR %max% goto choosenameb
if %choosemname% LSS %min% goto choosenameb
goto gotnamenow

max est votre maximum et min est votre minimum. Ce n'est pas très efficace car cela peut prendre beaucoup de tours si votre portée est trop petite. En outre, cela ne fonctionnera pas pour les nombres supérieurs à 32767.

3
calebhk98
@echo off
title Professional Hacker
color 02
:matrix
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%% 
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%% 
echo %random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%% 
goto matrix
2
Sinji58

Disons que vous voulez un nombre 1-5; vous pouvez utiliser les éléments suivants:

    :LOOP
    set NUM=%random:~-1,1%
    if %NUM% GTR 5 (
    goto LOOP )
    goto NEXT

Ou vous pouvez utiliser: ~ 1,1 au lieu de: ~ -1,1. La valeur: ~ -1,1 n'est pas nécessaire, mais elle réduit considérablement le temps nécessaire pour atteindre la bonne plage. Supposons que vous vouliez un nombre compris entre 1 et 50, nous devons choisir entre 2 chiffres et 1 chiffre. Utilisation:

    :LOOP
    set RAN1=%random:~-1,1%
    if %RAN1% GTR 5 (
    goto 1 )
    if %RAN1%==5 (
    goto LOOP )
    goto 2

    :1
    set NUM=%random:~-1,1%
    goto NEXT

    :2
    set NUM=%random:~-1,2%
    goto NEXT

Vous pouvez ajouter davantage à cet algorithme pour choisir entre de grandes plages, telles que 1-1000.

2
user3542843

Si vous divisez par une valeur plus grande, vous obtiendrez une quantité énorme de doublons les uns après les autres ..___.

@echo off
REM 
SET maxvalue=10
SET minvalue=1

SETLOCAL 
SET /A tmpRandom=((%RANDOM%)%%(%maxvalue%))+(%minvalue%)
echo "Tmp random: %tmpRandom%"
echo "Random:  %RANDOM%"
ENDLOCAL
1
Kvant
@(IF not "%1" == "max" (start /MAX cmd /Q /C %0 max&X)ELSE set C=1&set D=2&wmic process where name="cmd.exe" CALL setpriority "REALTIME">NUL)&CLS
:Y
title %random%6%random%%random%%random%%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%&color %D%&ECHO %random%%C%%random%%random%%random%%random%6%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%&(IF %C% EQU 46 (TIMEOUT /T 1 /NOBREAK>nul&set C=1&CLS&IF %D% EQU 9 (set D=1)ELSE set /A D=%D%+1)ELSE set /A C=%C%+1)&goto Y

simplifié avec plusieurs instructions IF et beaucoup de ((()))

1
simple

Et juste pour être complètement aléatoire pour ceux qui ne veulent pas toujours un écran noir.

@(IF not "%1" == "max" (start /MAX cmd /Q /C %0 max&X)ELSE set A=0&set C=1&set V=A&wmic process where name="cmd.exe" CALL setpriority "REALTIME">NUL)&CLS
:Y
(IF %A% EQU 10 set A=A)&(IF %A% EQU 11 set A=B)&(IF %A% EQU 12 set A=C)&(IF %A% EQU 13 set A=D)&(IF %A% EQU 14 set A=E)&(IF %A% EQU 15 set A=F)
(IF %V% EQU 10 set V=A)&(IF %V% EQU 11 set V=B)&(IF %V% EQU 12 set V=C)&(IF %V% EQU 13 set V=D)&(IF %V% EQU 14 set V=E)&(IF %V% EQU 15 set V=F)
(IF %A% EQU %V% set A=0)
title %A%%V%%random%6%random%%random%%random%%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%&color %A%%V%&ECHO %random%%C%%random%%random%%random%%random%6%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%&(IF %C% EQU 46 (TIMEOUT /T 1 /NOBREAK>nul&set C=1&CLS&SET /A A=%random% %%15 +1&SET /A V=%random% %%15 +1)ELSE set /A C=%C%+1)&goto Y

Cela changera la couleur de l'écran et les deux sont aléatoires.

1
strance

voici un exemple que j'ai créé pour vous. Il devrait afficher une boîte de dialogue vous demandant de sélectionner un nombre compris entre 1 et 10. En fonction du nombre sélectionné, il générera un exemple de nombre aléatoire dans un fichier de traitement par lots que vous avez nommé. Si vous sélectionnez "1", vous obtiendrez un exemple aléatoire de numéro à 1 chiffre. Si vous sélectionnez "10", vous obtiendrez un exemple aléatoire de numéro à 10 chiffres.

@echo off
color f0
set /p "FileName= Enter Filename (Without Extension) : "
echo @echo off >> %FileName%.bat
echo File Created!
pause
cls
:CommandLine
set /p "calc= ~%ComputerName%: Enter a number to recieve the amount of  random digits :"
if %calc%==genrand_help goto GenerateRandomHelp
if %calc%==1 echo echo %%RANDOM:~-1%% >> %FileName%.bat
if %calc%==2 echo echo %%RANDOM:~-1%%%%RANDOM:~-1%% >> %FileName%.bat 
if %calc%==3 echo echo %%RANDOM:~-1%%%%RANDOM:~-1%%%RANDOM:~-1%% >>  %FileName%.bat
if %calc%==4 echo echo %%RANDOM:~-1%%%%RANDOM:~-1%%%%RANDOM:~-1%%%%RANDOM:~-1%% >> %FileName%.bat
if %calc%==5 echo echo %%Random%% >> %FileName%.bat
if %calc%==6 echo echo %%Random%%%%RANDOM:~-1%% >> %FileName%.bat
if %calc%==7 echo echo %%Random%%%%RANDOM:~-1%%%%RANDOM:~-1%% >> %FileName%.bat 
if %calc%==8 echo echo %%Random%%%%RANDOM:~-1%%%%RANDOM:~-1%%%%RANDOM:~-1%% >> %FileName%.bat
if %calc%==9 echo echo  %%Random%%%%RANDOM:~-1%%%%RANDOM:~-1%%%%RANDOM:~-1%%%%RANDOM:~-1%% >>  %FileName%.bat
if %calc%==10 echo echo %%Random%%%%Random%% >> %FileName%.bat  
goto CommandLine
0
zask