Comment utiliser au hasard dans le script BATCH?
%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]).
% 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.
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
@echo off & setLocal EnableDelayedExpansion
for /L %%a in (1 1 100) do (
echo !random!
)
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!
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
où 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.
@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
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.
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
@(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 ((()))
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.
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