2012-07-26 72 views
0

我正在嘗試編寫一個Windows批處理文件,該文件將生成一個從0到9的隨機數,然後在我們的遊戲服務器中加載一個不同的地圖列表隨機數。在Windows批處理文件中生成0-9中的隨機數

我試圖修改一個類似的文件,在這個論壇上生成隨機字符,但是當我將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=
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 

一旦我能得到這個可靠地選擇角色我只需要一個選擇過程增加,這將調用服務器爲每個地圖列表中的不同命令行的末尾。

+0

我想你錯過了「回聲消失」這將關閉回聲和命令輸出將顯示 – 2013-11-11 04:44:55

回答

3

使用SET中的隨機字符串,然後刪除除最後一個字符以外的所有字符。

SET RAND=%RANDOM:~-1% 
2

的LastStar007方法爲0和9之間的值工作很大對於返回0和Ñ之間的僞隨機數的更通用的解決方案,只需使用SET/A來獲得%隨機%模(正+1)。

例如,要獲得在命令行上0到9之間的一個隨機數,使用

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

如果在一個批處理文件,則模運算符必須加倍

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

如果使用您的問題仍然存在,請嘗試以下操作。它會生成一個介於ab之間的數字。調整它到您的需求:

@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