14 ответов:
%RANDOM%дает вам случайное число между 0 и 32767.используя выражение типа
SET /A test=%RANDOM% * 100 / 32768 + 1, вы можете изменить диапазон на все что угодно (здесь диапазон [1...100] вместо [0...32767]).
% RANDOM% дает вам случайное число между 0 и 32767.
вы можете управлять диапазоном чисел с помощью:
set /a num=%random% %%100- произведет номер между 0~99.
Это:
set /a num=%random% %%100 +1- произведет номер между 1~100.
вы, вероятно, захотите получить несколько случайных чисел и, возможно, захотите указать другой диапазон для каждого из них, поэтому вы должны определить функцию. В моем примере я генерирую числа от 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
set /a number=%random% %% [maximum]-[minimum]пример "
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. The: ~-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вы можете добавить больше к этому алгоритму, чтобы выбрать между большими диапазонами, такими как 1-1000.
@(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 и большим количеством ((()))
и просто, чтобы быть совершенно случайным для тех, кто не всегда хочет, черный экран.
@(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это приведет к изменению цвета экрана также являются случайными.
Если вы разделите на некоторое большое значение, вы получите огромное количество дубликатов один за другим. Что вам нужно сделать, это взять по модулю % RANDOM% value:
@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-10, в зависимости от выбранного номера, он будет генерировать пример случайного числа для пакетного файла, который вы назвали. Если вы выберете "1", то вы получите случайный 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
теперь с участием всех цветов радуги dos
@(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
и просто быть совершенно случайным, полное отсутствие порядка:
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
Comments