2015-05-29 52 views
0

有一个简单的方法来制作一个数字发生器。
但我只想生成的编号为1 - 4数字发生器1-4 |批量

下面的程序需要很长的时间输出

@echo off 
:RUN 
set /a Num=%random% 
if %num% LEQ 4 echo %num% 
goto :RUN 

它,直到它得到不到4运行%随机%,这可能是一段时间。

+0

查看'for /?'的输出 - 特别是关于'for/L'的部分。还是你想要一个无限循环的数字在1和4之间? – SomethingDark

+0

'set/a NumBetween1and4 =%random%%% 4 + 1' – Aacini

+0

可能的重复[如何在BATCH脚本中随机使用?](http://stackoverflow.com/questions/5777400/how-to-use-random -in-批处理脚本) – indiv

回答

0

可以掩盖在随机值的比特(And操作= &操作者)来检索较低的两个,得到一个数的范围为[0,3],加入1,以适应上述范围内

set /a "num=(%random% & 3) + 1" 

或者,作为生成的随机值使用15个比特,它可以被转移到仅检索两个高位比特

set /a "num=(%random% >> 13) + 1" 

需要在两种情况下的括号因为+操作者具有比更高的优先级或>>运营商。

也可以使用一个Mod操作(%操作者)通过4来检索从一个除法的余数,也在范围[0,3]

set /a "num=%random% %% 4 + 1" 

%操作员得到一个号码(内部批次文件%必须被转义,因此它变成%%)比+运算符具有更高的优先级,所以这里不需要括号。