如何在BATCH脚本中使用随机数?
如何在BATCH脚本中使用随机数?
%RANDOM%
可以生成一个介于0到32767之间的随机数。
通过使用类似 SET /A test=%RANDOM% * 100 / 32768 + 1
的表达式,您可以将范围更改为任何您想要的值(这里的范围是[1…100]而不是[0…32767])。
SETLOCAL ENABLEDELAYEDEXPANSION
命令,并使用 !RANDOM!
代替 %RANDOM%
,就像 Eugene 发布的那样。 - mousio%RANDOM% * (%maxval% - %minval% + 1) / 32768 + %minval%
;请先将 minval
和 maxval
设置为适当的值。 - mousioecho random = %random%
总是给我一个在 4000 范围内的数字?(它似乎在缓慢增加) - john k%RANDOM%会随机生成0到32767之间的数字。
您可以使用以下方式控制数字的范围:
set /a num=%random% %%100
这个:
set /a num=%random% %%100 +1
-将生成1~100之间的数字。
%random% %% 100
不是魔法语法,实际上是%random%%100
少一个空格,其中%%
只是转义符号“%”,表示取模。) - CherryDT%9
以内的参数;%100
意味着在 %1
后面加上两个零。 - Neil你可能想要获取多个随机数,并且可能希望能够为每个数字指定不同的范围,所以你应该定义一个函数。在我的示例中,我使用 call:rand 25 30
生成从25到30的数字。然后,在该函数退出后,结果将存储在 RAND_NUM
中。
@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]
example "
set /a number=%random% %% 100-50
将会给出一个在100和50之间的随机数。如果您不在批处理脚本中使用此行,请确保只使用一个百分号作为操作数!
EnableDelayedExpansion
。:choosenamea
cls
set /a choosemname=%random%
if %choosemname% GTR %max% goto choosenameb
if %choosemname% LSS %min% goto choosenameb
goto gotnamenow
其中max
是您的最大值,min
是您的最小值。这种方法不太有效率,如果您的范围太小,可能需要很多轮次。此外,这对于大于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
假设你需要一个1-5之间的数字,你可以使用以下代码:
:LOOP
set NUM=%random:~-1,1%
if %NUM% GTR 5 (
goto LOOP )
goto NEXT
或者你可以使用:~1,1代替:~-1,1。:~-1,1不是必需的,但它大大减少了命中正确范围所需的时间。假设你想要一个1-50的数字,我们需要在2位数和1位数之间做出决定。使用:
: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
如果你将某个大的值除以一个数,你会得到一连串巨量的重复值。你需要做的是对%RANDOM%的值取模:
@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
使用多个IF语句和大量的((()))进行简化