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
を使用して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
バッチスクリプトで行を使用していない場合は、オペランドとして1つのパーセント記号のみを使用してください。
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
このアルゴリズムにさらに追加して、1〜1000などの大きな範囲を決定できます。
大きな値で除算すると、膨大な量の重複が次々に発生します。あなたがする必要があるのは、%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
これにより画面の色が変わり、両方ともランダムになります。
ここに私が作成した例があり、選択した番号に応じて番号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