배치 스크립트에서 랜덤을 사용하는 방법은 무엇입니까?
배치 스크립트에서 랜덤을 사용하는 방법은 무엇입니까?
%RANDOM%
0 합니다.
다과같은표사용현과 같은 것.SET /A test=%RANDOM% * 100 / 32768 + 1
범위를 원하는 대로 변경할 수 있습니다(여기서 범위는 [0…32767] 대신 [1…100]).
%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
@echo off & setLocal EnableDelayedExpansion
for /L %%a in (1 1 100) do (
echo !random!
)
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보다 큰 숫자에는 사용할 수 없습니다.
숫자 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
이 알고리즘에 추가하여 1-1000과 같은 큰 범위를 결정할 수 있습니다.
@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
어떤 큰 값으로 나누면 엄청난 양의 중복이 연이어 발생할 것입니다.%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 문 및 다양한 기능으로 간소화((())
그리고 항상 검은 화면을 원하지 않는 사람들을 위해 완전히 무작위적인 것입니다.
@(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
이렇게 하면 화면 색상이 변하며 둘 다 무작위로 바뀝니다.
이제 도스 레인보우의 모든 색상을 특징으로 합니다.
@(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
여기 제가 만든 예제가 있습니다. 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
그리고 완전히 무작위적으로 말하자면, 질서의 완전한 결여입니다.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
언급URL : https://stackoverflow.com/questions/5777400/how-to-use-random-in-batch-script
'programing' 카테고리의 다른 글
동일한 서버의 Apache 및 Node.js (0) | 2023.05.25 |
---|---|
Xcode에서 iOS 시뮬레이터를 실행하고 검은색 화면을 받은 후 Xcode가 매달려 작업을 중지할 수 없습니다. (0) | 2023.05.25 |
정수.파스 - 더 좋은 방법? (0) | 2023.05.20 |
mongodb 반환 개체를 사전으로 변환 (0) | 2023.05.20 |
Getting all types in a namespace via reflection (0) | 2023.05.20 |