0

0 から 9 までの乱数を生成し、乱数に基づいてゲーム サーバーに別のマップ リストをロードする Windows バッチ ファイルを作成しようとしています。

ランダムな文字を生成するためにこのフォーラムにあった同様のファイルを変更しようとしましたが、maxchars 変数の長さを 1 に減らすと.

@echo is off応答として取得することもあれば、番号を取得することもあります。

ここに私が持っているものがあります:

@echo off & setlocal EnableDelayedExpansion
REM Random.bat
REM
REM Change these values to whatever you want, or change the code to take them
REM as command-line arguments.  You must set CHARS_LEN to the string length
REM of the string in the CHARS variable.
REM 
REM This script generates a string of these characters at least
REM MIN_CHARS_IN_LINE chars long and at most MAX_CHARS_IN_LINE chars long.

SET CHARS=0123456789
SET /A CHARS_LEN=10 + 10 + 10
SET /A MIN_CHARS_IN_LINE=1
SET /A MAX_CHARS_IN_LINE=2

REM Pick a random line length and output a random character until we reach that
REM length.

call:rand %MIN_CHARS_IN_LINE% %MAX_CHARS_IN_LINE%
SET /A LINE_LENGTH=%RAND_NUM%

SET LINE=
    for /L %%a in (1 1 %LINE_LENGTH%) do (
    call:rand 1 %CHARS_LEN%
    SET /A CHAR_INDEX=!RAND_NUM! - 1
    CALL SET EXTRACTED_CHAR=%%CHARS:~!CHAR_INDEX!,1%%
    SET LINE=!LINE!!EXTRACTED_CHAR!    
)
echo !LINE!

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

:eof

確実に文字を選択できるようになったら、マップ リストごとに異なるコマンド ラインでサーバーを呼び出す選択プロセスを最後に追加する必要があります。

4

3 に答える 3

3

ランダムな文字列を使用してSET、最後の文字以外をすべて削除します。

    SET RAND=%RANDOM:~-1%
于 2012-07-27T00:14:12.920 に答える
3

LastStar007 メソッドは、0 から 9 までの値に最適です。0 からnまでの疑似乱数を返すより一般的なソリューションについては、SET /A を使用して %random% modulo (n+1) を取得します。

たとえば、コマンド ラインで 0 ~ 9 の乱数を取得するには、次を使用します。

set /a "rand=%random% % 10"

バッチ ファイルで使用する場合、モジュロ演算子を 2 倍にする必要があります

set /a "rand=%random% %% 10"
于 2012-07-27T01:42:07.347 に答える
0

それでも問題が解決しない場合は、次のことを試してください。aとの間の数値を生成しbます。必要に応じて微調整します。

@echo off   
color 02  
echo enter value of A  
set  /p a=  
echo.  
echo  enter value of B  
set /p b=  
:main  
set no=%random%  
if  %no% GEQ %a% goto sub  
if not %no% GEQ %a% goto  main  
:sub  
if %no% LEQ  %b% goto end  
if not %no% LEQ  %b% goto  main  
:end      
echo %no%  
goto main
于 2016-12-15T11:46:26.447 に答える