批量中%随机%以及如何避免特定范围内的特定数字?

时间:2015-01-03 15:54:36

标签: batch-file

我试图批量执行任务,生成特定范围内的随机数,我已经使用下面列出的代码完成了这项任务。

set /a setvar=%random% %% 100+0

另外还应该避免一组数字,到目前为止我自己都无法实现。

我的意思是一个批处理文件,可生成1-100之间的数字,但避免使用数字10,20,30,40,50,60,70,80和90.

这有什么解决方案吗?我不知所措。

4 个答案:

答案 0 :(得分:2)

@echo off
setlocal
:: set list of values that should be avoided
for /l %%N in (10,10,90) do (
    set "_%%N=."
)


    set /a setvar=%random% %% 100+1
    :: if value is in the list sums the set value with 
    :: random value between 0 and 9 getting modulus of 9 
    if defined _%setvar% (
        set /a setvar=setvar +  %random% %% 9 + 1
    )


echo %setvar%

答案 1 :(得分:2)

@ECHO OFF
SETLOCAL
:GetNumber
set /a setvar=%random% %% 100 + 1
IF %setvar% neq 100 IF %setvar:~-1%==0 GOTO getnumber
echo Random number is %setvar%

GOTO :EOF

你说你不想生产?0但是你没有说你不想要100。该程序在没有(10 20 30 40 50 60 70 80 90)的情况下生成。如果您还想排除100,请删除IF %setvar% neq 100

答案 2 :(得分:1)

这很容易实现:

@echo off
:GetNumber
set /a Number=%random% %% 100
set /a Remainder=Number %% 10
if %Remainder% == 9 if not %Number% == 99 goto GetNumber
set /a Number+=1
echo Random number is %Number%

首先,通过将随机数除以100,并将剩余部分分配给环境变量,计算0到99范围内的随机数。

这个随机数除以10得到余数。

如果此余数为9且数字不是99,则在最后一步中添加1之后,该数字将为10,或20或30。因此,必须通过使用新的随机数再次运行整个计算来忽略数字9,19,29,39,....

答案 3 :(得分:1)

对于1-99范围内的值,只需确保最后一位数落在1-9范围内

set /a "setvar=(%random% %% 100 / 10 * 10) + (%random% %% 9 + 1)"

或者,如果范围是1-100并且100必须包含在允许值列表中

set /a "x=%random% %% 91 + 1", "x=x+(x-1)/9", "x=x-x/100"

在这种情况下,源范围1-91(除{有问题的数字之外的1-100)将映射到目标范围1-100,添加相应的值以跳过排除的数字