it-swarm.asia

كيفية استخدام عشوائي في BATCH النصي؟

كيفية استخدام عشوائي في BATCH النصي؟

93
IAdapter

%RANDOM% يمنحك رقم عشوائي بين 0 و 32767.

باستخدام تعبير مثل SET /A test=%RANDOM% * 100 / 32768 + 1 ، يمكنك تغيير النطاق إلى أي شيء تريده (هنا النطاق هو [1 ... 100] بدلاً من [0… 32767]).

106
mousio

يمنحك٪ RANDOM٪ رقمًا عشوائيًا بين 0 و 32767.

يمكنك التحكم في نطاق الأرقام باستخدام:

set /a num=%random% %%100

- سينتج الرقم بين 0 ~ 99.

هذا:

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

- سوف ينتج العدد بين 1 ~ 100.

47
GaryNg

قد ترغب في الحصول على عدة أرقام عشوائية ، وقد ترغب في أن تكون قادرًا على تحديد نطاق مختلف لكل واحد ، لذلك يجب عليك تحديد وظيفة. في المثال الخاص بي ، أقوم بإنشاء أرقام من 25 إلى 30 باستخدام call:Rand 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
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]

مثال "

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

سيعطي رقمًا عشوائيًا بين 100 و 50. تأكد من استخدام علامة النسبة المئوية فقط كمعامل إذا كنت لا تستخدم السطر في نص برمجي دفعي!

3
Jacob

يمكنك القيام بذلك بهذه الطريقة ، والتي لا تتطلب EnableDelayedExpansion

:choosenamea
cls
set /a choosemname=%random%

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

حيث max هو الحد الأقصى و min هو الحد الأدنى الخاص بك. هذا غير فعال للغاية حيث قد يستغرق الكثير من الجولات إذا كان نطاقك صغيرًا جدًا. أيضًا ، لن يعمل هذا مع الأرقام الأكبر من 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

دعنا نقول أنك تريد رقم 1-5 ؛ يمكنك استخدام ما يلي:

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

أو يمكنك استخدام: ~ 1،1 بدلاً من: ~ -1،1. : ~ -1،1 ليست مطلوبة ، ولكنها تقلل إلى حد كبير مقدار الوقت الذي يستغرقه الوصول إلى النطاق الصحيح. لنفترض أنك تريد الرقم 1-50 ، نحتاج إلى تحديد ما بين رقمين ورقم واحد. استعمال:

    :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

يمكنك إضافة المزيد إلى هذه الخوارزمية للاختيار بين النطاقات الكبيرة ، مثل 1-1000.

2
user3542843

إذا كنت ستقسم على قيمة كبيرة ستحصل على كمية كبيرة من التكرارات واحدة تلو الأخرى. ما عليك القيام به هو اتخاذ معامل القيمة٪ 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
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

مبسطة مع عبارات IF متعددة والكثير من ((()))

1
simple

ولكي تكون عشوائيًا تمامًا لأولئك الذين لا يريدون دائمًا شاشة سوداء.

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

هذا سوف يغير لون الشاشة أيضا كلاهما عشوائي.

1
strance

هنا مثال قمت بإنشائه من أجلك ، يجب أن يعرض مربع حوار يطلب منك تحديد رقم من 1 إلى 10 ، وهذا يتوقف على الرقم الذي تحدده ، وسيقوم بإنشاء مثال للرقم العشوائي لملف دفعي قمت بتسميته. إذا قمت بتحديد "1" ، فستحصل على مثال عشوائي مكون من رقم واحد. إذا قمت بتحديد "10" ، فستحصل على مثال عشوائي مكون من 10 أرقام.

@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