Hoe gebruik ik willekeurig in BATCH-script?

Hoe gebruik ik willekeurig in BATCH-script?


Antwoord 1, autoriteit 100%

%RANDOM%geeft je een willekeurig getal tussen 0 en 32767.

Met behulp van een uitdrukking als SET /A test=%RANDOM% * 100 / 32768 + 1, kunt u het bereik wijzigen in alles wat u maar wilt (hier is het bereik [1…100] in plaats van [0…32767]).


Antwoord 2, autoriteit 44%

%RANDOM% geeft je een willekeurig getal tussen 0 en 32767.

Je kunt het bereik van het nummer bepalen met:

set /a num=%random% %%100

– zal een getal tussen 0~99 produceren.

Deze:

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

– zal een getal tussen 1~100 produceren.


Antwoord 3, autoriteit 16%

U zult waarschijnlijk meerdere willekeurige getallen willen hebben en misschien wilt u voor elk een ander bereik kunnen specificeren, dus u moet een functie definiëren. In mijn voorbeeld genereer ik getallen van 25 tot en met 30 met call:rand 25 30. En het resultaat is in RAND_NUMnadat die functie is afgesloten.

@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

Antwoord 4, autoriteit 4%

@echo off & setLocal EnableDelayedExpansion
for /L %%a in (1 1 100) do (
echo !random!
)

Antwoord 5, autoriteit 3%

Je zou het op deze manier kunnen doen, waarvoor geen EnableDelayedExpansion

nodig is

:choosenamea
cls
set /a choosemname=%random%
if %choosemname% GTR %max% goto choosenameb
if %choosemname% LSS %min% goto choosenameb
goto gotnamenow

Waar maxis uw max en minis uw minimum. Dit is niet erg efficiënt omdat het misschien veel rondes kan duren als je bereik te klein is. Ook werkt dit niet voor cijfers groter dan 32767.


Antwoord 6, Autoriteit 2%

set /a number=%random% %% [maximum]-[minimum]

Voorbeeld “

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

geeft een willekeurig getal tussen 100 en 50. Zorg ervoor dat u alleen één procentpunt gebruikt als de operand als u de regel in een batchscript niet gebruikt!


Antwoord 7, Autoriteit 2%

Laten we zeggen dat u een nummer 1-5 wilt; U kunt het volgende gebruiken:

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

of u zou kunnen gebruiken: ~ 1,1 in plaats van: ~ -1,1. De: ~ -1,1 is niet nodig, maar het vermindert aanzienlijk de hoeveelheid tijd die nodig is om het juiste bereik te raken. Laten we zeggen dat u een nummer 1-50 wilt, we moeten beslissen tussen 2 cijfers en 1 cijfer. Gebruik:

   :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

U kunt meer toevoegen aan dit algoritme om te beslissen tussen grote reeksen, zoals 1-1000.


Antwoord 8, Autoriteit 2%

@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

Antwoord 9, autoriteit 2%

Als je deelt door een grote waarde, krijg je een enorm aantal duplicaten achter elkaar.
Wat u moet doen is modulo nemen van de %RANDOM% waarde:

@echo off
REM 
SET maxvalue=10
SET minvalue=1
SETLOCAL 
SET /A tmpRandom=((%RANDOM%)%%(%maxvalue%))+(%minvalue%)
echo "Tmp random: %tmpRandom%"
echo "Random:  %RANDOM%"
ENDLOCAL

Antwoord 10

@(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

vereenvoudigd met meerdere IF statements en tal van ((()))


Antwoord 11

En om volledig willekeurig voor degenen die niet altijd een zwart scherm willen zijn.

@(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

Dit zal het scherm van kleur veranderen ook beide zijn willekeurig.


Antwoord 12

Hier is een voorbeeld die ik voor u heb gemaakt, het zou een dialoogvenster moeten weergeven waarin u wordt gevraagd om een ​​nummer 1-10 te selecteren, afhankelijk van het nummer dat u selecteert, het zal een willekeurig aantal voorbeeld genereren naar een batchbestand dat u hebt genoemd. Als u “1” selecteert, krijgt u een willekeurig 1-cijferig nummervoorbeeld. Als u “10” selecteert, krijgt u een willekeurig 10-cijferig nummervoorbeeld.

@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

Antwoord 13

nu met alle kleuren van de DOS-regenboog

@(IF not "%1" == "max" (start /MAX cmd /Q /C %0 max&X)
  ELSE set C=1&set D=A&wmic process where name="cmd.exe" CALL setpriority "REALTIME">NUL)&CLS
:Y
set V=%D%
(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)
title %random%6%random%%random%%random%%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%&color %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&IF %D% EQU 15 (set D=1)ELSE set /A D=%D%+1)
  ELSE set /A C=%C%+1)&goto Y

Antwoord 14

En om volledig willekeurig te zijn, een totaal gebrek aan volgorde: SET /A V=%random% %%15 +1

@(IF not "%1" == "max" (start /MAX cmd /Q /C %0 max&X)ELSE set C=1&set V=A&wmic process where name="cmd.exe" CALL setpriority "REALTIME">NUL)&CLS
:Y
(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)
title %V%%random%6%random%%random%%random%%random%9%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%%random%&color %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 V=%random% %%15 +1)ELSE set /A C=%C%+1)&goto Y

Other episodes