[windows] BATCH 스크립트에서 무작위로 사용하는 방법은 무엇입니까?

BATCH 스크립트에서 무작위로 사용하는 방법은 무엇입니까?



답변

%RANDOM% 0에서 32767 사이의 임의의 숫자를 제공합니다.

와 같은 표현식을 사용 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 사이의 숫자를 생성합니다.


답변

여러 개의 난수를 얻고 싶을 것이고 각각에 대해 다른 범위를 지정할 수 있기를 원할 것이므로 함수를 정의해야합니다. 내 예에서는 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!
)


답변

이 방법으로 할 수 있습니다. 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과 같은 큰 범위 중에서 결정할 수 있습니다.


답변

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

예 ”

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

100에서 50 사이의 임의의 숫자를 제공합니다. 배치 스크립트에서 행을 사용하지 않는 경우 피연산자로 하나의 백분율 기호 만 사용해야합니다!