Board logo

标题: 批处理如何产生一个100-200 之间的随机数? [打印本页]

作者: youxi01    时间: 2008-1-3 23:16     标题: 批处理如何产生一个100-200 之间的随机数?

题目如题。
要求:方法不限,达到目的即可。
作者: 随风    时间: 2008-1-7 12:43

代码内容,设置的颜色为white,防止答案轻易泄露
显示方法 1:按住鼠标左键,框住代码即可。
显示方法 2:点击代码右上角的“复制内容到剪贴板”也可。
  1. @echo off
  2. set /a w=%random%%%100+100
  3. echo %w%
  4. pause
复制代码
高亮(反选)显示代码

[ 本帖最后由 随风 于 2008-1-7 19:55 编辑 ]
作者: zhangxiaopeng    时间: 2008-4-4 10:32

后面为什么要加三个%%%呢??
作者: youxi01    时间: 2008-4-4 10:41

呵呵,他的写法有点点“怪”
写成这个样子你就明白了:


set /a w=%random% %% 100+100
作者: ieutk    时间: 2008-4-28 23:04

  1. @echo off
  2. :loop
  3. set /a w=%random%%%101+100
  4. echo %w%
  5. pause
  6. goto loop
复制代码

作者: tangfu    时间: 2008-6-8 22:31

xp命令行下面的random变量范围是多少?
是不是最多5位,另外,它会不会是负数
作者: 随风    时间: 2008-6-8 22:40

%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。
作者: tangfu    时间: 2008-6-9 09:13

没想到这么快就有人回复了,是个不错的论坛哈!
作者: 421062724    时间: 2008-7-12 22:50

原来是这样,我以前都不知道,也曾经考虑过怎么实现,但如果没这个的话,我不会弄,呵呵
作者: z_berry    时间: 2008-9-2 18:41

看看大家的评论
作者: kingsgame    时间: 2008-9-3 21:43

新手进来学习学习random~
还没有学过这个参数
作者: SmallK    时间: 2008-9-4 00:49

多写了几句,方便测试一点。
  1. @echo off
  2. :start
  3. cls
  4. set /a num=%random%%%101+100
  5. echo 本次在规定范围内产生的随机数为%num%
  6. pause
  7. goto start
复制代码

作者: SmallK    时间: 2008-9-4 00:53

原帖由 随风 于 2008-1-7 12:43 发表
代码内容,设置的颜色为white,防止答案轻易泄露
显示方法 1:按住鼠标左键,框住代码即可。
显示方法 2:点击代码右上角的“复制内容到剪贴板”也可。@echo off
set /a w=%random%%%100+100
echo %w%
pause高亮 ...


随风,你的变量计算公式还差那么一点点吧~~
作者: jellyhk    时间: 2008-9-5 08:41

这问题我不知道!!
学习西!!!
作者: bighead1984    时间: 2008-9-6 22:20

好东西 学习中 呵呵
作者: 3399kl    时间: 2008-9-12 13:19

就知道生成随机数%random%,学习
作者: batbird    时间: 2008-9-12 14:43

  1. @echo off
  2. :redo
  3. set num=%random%
  4. if %num% lss 100 goto redo
  5. if %num% gtr 200 goto redo
  6. echo %num%
  7. set num=
  8. pause>nul
复制代码

-------------------------------------------------------------------------------------
还是set /a w=%random%%%100+100这个简洁

[ 本帖最后由 batbird 于 2008-9-12 15:06 编辑 ]
作者: wxcute    时间: 2008-9-15 12:57

切成两段,没有200
  1. @echo off
  2. :eo
  3. cls
  4. echo 1%random:~-2%
  5. pause
  6. goto :eo
复制代码

作者: lovelymorning    时间: 2008-9-28 19:52

原帖由 wxcute 于 2008-9-15 12:57 发表
切成两段,没有200@echo off
:eo
cls
echo 1%random:~-2%
pause
goto :eo



%random:~-2%
不妥吧,如果随机出来的是一位数呢?那 %random:~-2% 不就出错了???
作者: wxcute    时间: 2008-10-1 19:32     标题: 回复19数,确实是,多谢指正。

改成如下
  1. @echo off
  2. :eo
  3. cls
  4. echo 1%random:~-1%%random:~-1%
  5. pause
  6. goto :eo
复制代码

作者: firewolf85    时间: 2008-12-6 13:10

set /a num=%random%%%100+100
作者: firewolf85    时间: 2008-12-6 13:28

对代码
  1. set /a num=%random%%%100+100
复制代码
测试发现小问题一个,不能得到200,数值范围为100-199
将代码修改为
  1. set /a num=%random%%%101+100
复制代码
可以得到完整的100-200

[ 本帖最后由 firewolf85 于 2008-12-6 13:40 编辑 ]
作者: suqili56    时间: 2008-12-6 13:47     标题: 不知道这样对不对

@echo off
set a=%random%
set /a n=%a%%%100*2
echo %n%
pause
作者: firewolf85    时间: 2008-12-7 15:11

原帖由 suqili56 于 2008-12-6 13:47 发表
@echo off
set a=%random%
set /a n=%a%%%100*2
echo %n%
pause

楼上这个输出的貌似都是偶数吧
作者: qqha001    时间: 2008-12-12 11:23

@echo off
set /a a=%random%%%101+100
echo %a%
pause
作者: qqha001    时间: 2008-12-12 11:25     标题: 回复 2楼 的帖子

这个能取到200吗?好像是100到199吧
作者: Batcher    时间: 2008-12-12 13:19     标题: 回复 26楼 的帖子

你是正确的
作者: steven007    时间: 2008-12-19 09:30

我也来学习一下:
@echo off
color 1a &mode con cols=35 lines=10
:loop
cls
set /a w=%random% %%101+100
echo.&echo.&echo.&echo.
echo         产生的随机数是:%w%
ping -n 2 127.1>nul
goto loop
作者: denev2004    时间: 2009-1-28 17:30

=====看来我的想法太复杂了

我想的方法是先random%%200然后把小于100的用if语句给剔除掉. .. .
作者: keen    时间: 2009-3-29 22:57

没有200:
  1. @echo off
  2. :start
  3. cls
  4. set /a a=%random%%%10
  5. set /a b=%random%%%10
  6. echo 1%a%%b%
  7. pause&goto start
复制代码

作者: woxingwoshu007    时间: 2009-3-30 21:09

@echo off
:liao
set /a hai=%random% %%101+100
echo %hai%
pause>nul
goto liao
作者: energy2009    时间: 2009-4-9 21:57

  1. @echo off
  2. :m
  3. set a=%random%
  4. set/a b=%a% %%2
  5. if %b%==0 goto m else goto next
  6. :next
  7. set c=%a:~1,2%
  8. echo %b%%c%
  9. ping -n 3 127.1>nul 2>nul&exit
复制代码

作者: jackelijie135    时间: 2009-4-9 23:54

  1. @echo off
  2. :start
  3. set/a n=%random%%%200
  4. if %n% lss 100 set/a n=%n%+100
  5. echo.%n%
  6. pause
  7. goto start
复制代码


嘿嘿,这样算不算投机取巧
作者: jackelijie135    时间: 2009-4-9 23:58     标题: 回复 2楼 的帖子

貌似是100--199的随机数吧
作者: sjzong    时间: 2009-4-12 00:47

我也是昨天才弄懂这个随机数的产生的!!
作者: qjfke    时间: 2009-4-13 15:45

那个 %% 101+100是什么意思
作者: Batcher    时间: 2009-4-13 18:16     标题: 回复 36楼 的帖子

数值计算:先对101取余,再加上100。
作者: qjfke    时间: 2009-4-13 20:42

%% 是取余哦,怎么单独用没有法哦, ,我不会,谢谢
作者: Batcher    时间: 2009-4-14 15:52     标题: 回复 38楼 的帖子

如果有人能明白你的“怎么单独用没有法哦”是什么意思,也许你的问题将会得到解答。
作者: aiguozhe    时间: 2010-1-30 17:54

@echo off
set /a a=%random% %% 101+100
echo %a%
pause>nul
%0%

这个不难,就进上一笔吧
作者: zdsg2001    时间: 2010-1-30 20:33

@echo off
:ks
cls
set n=1%random:~0,2%
echo 100至200之间的数字有(包括100)
echo %n%
pause>nul
goto ks
作者: wgoxm521    时间: 2010-1-31 05:25

wxcute 和 keen的代码好。
思想就是分割到 单个整体 模块化。
呵呵。你们c和c++都很好吧。
作者: Kenmick    时间: 2010-2-24 17:44

  1. @echo off
  2. set /a a=%random% %%101+100
  3. echo %a%
  4. pause>nul
  5. %0
复制代码

作者: cnbat    时间: 2010-3-25 22:15

num=%random%%%101+100
谁能详细解释下这句啊
作者: 634175535    时间: 2010-4-25 17:29

这个不太懂,请高手赐教!
作者: wangqi0077    时间: 2010-5-4 19:36

想了半天没明白,问了下别人才发现原来是用取余数的方法...
作者: zhenglj    时间: 2010-5-4 21:45

原帖由 随风 于 2008-6-8 22:40 发表
%RANDOM% - 扩展到 0 和 32767 之间的任意十进制数字。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :a
  4. set /a ran=%random%
  5. if %ran% gtr 32723 (goto a)
  6. set /a var=%ran%%%101+100
  7. echo %var%
  8. pause
  9. cls
  10. goto a
复制代码

感觉这样子合理一些


[ 本帖最后由 zhenglj 于 2010-5-6 23:18 编辑 ]
作者: mangci    时间: 2010-5-6 23:19

  1. @ echo off
  2. :late
  3. set /a num=%random%%%200
  4. if %num% gtr 100 (echo %num%) else (goto late)
  5. pause
复制代码

作者: zhiyanzhai33    时间: 2010-5-7 20:59

100-200的理解是?如果是包含100和200,代码如下:
  1. @echo off
  2. :loop
  3. cls
  4. set /a r=100+%random%%%101
  5. echo %r%
  6. pause
  7. goto :loop
复制代码

作者: lianjl    时间: 2010-5-8 17:30

好东西。学习!偶也试一下:
@echo off
:start
set /a w=%random% %% 101+100
echo %w%
pause
goto start
作者: middlelaw    时间: 2010-5-11 18:40

@echo off
:loop
set /a m=%random%%%100+100
echo %m%
pause
goto loop
作者: poxi    时间: 2010-7-19 19:28

答:
  1. @echo off
  2. :start
  3. set /a mun=%random%%%200
  4. if %mun% lss 100 goto start else (
  5. echo %mun%
  6. )
  7. pause
复制代码
效果:

end;
作者: wangqi0077    时间: 2010-9-10 13:04

  1. @echo off
  2. set /p n=请输入下限值:
  3. set /p m=请输入上限值:
  4. set /a i=%random%%%%m%+%n%
  5. echo %i%
  6. pause
复制代码

作者: wc726842270    时间: 2010-9-12 20:21

@echo off
set /a b=%random%%%100 +100
echo %b% >>b.txt
pause
作者: leap    时间: 2010-9-13 10:45

  1. @echo off
  2. :1
  3. set /a aa=%random%%%201
  4. if %aa% gtr 99 (echo %aa%) else goto 1
  5. pause&goto 1
复制代码

[ 本帖最后由 leap 于 2010-9-13 10:47 编辑 ]
作者: we6540    时间: 2011-2-2 16:13

@echo off
set /a a=%random%%%100+200
echo %a%
pause
作者: we6540    时间: 2011-2-2 16:21

上面的搞错了
@echo off
:1
set /a a=%random%%%99+101
echo %a%
pause&goto :1
作者: sctrue    时间: 2011-3-11 22:34     标题: 这是什么意思啊?看不懂 只知道random能产生一个随机数

set /a num=%random%%%100+100
作者: mxxcgzxxx    时间: 2011-4-7 23:01

本帖最后由 mxxcgzxxx 于 2011-4-7 23:05 编辑

我的够特别的吧,基本超乱
  1. @echo off
  2. :xx
  3. set /a a=%rendom:~1,2%+100
  4. echo %a%
  5. pause
  6. goto xx
复制代码

作者: dosbat    时间: 2011-4-20 21:25

3# zhangxiaopeng
因为在批处理中 取模运算是:%% 需要2个
而为了引用random 要用%random%
故出现了%random%%%这个形式
作者: dosbat    时间: 2011-4-20 21:46

本帖最后由 dosbat 于 2011-4-20 21:53 编辑

呵呵 代码如下 希望高手点评下 看有哪里写的不合适的地方
菜鸟一个 呵呵 代码如下:
  1. @echo off&color 0a
  2. set max=200,min=100
  3. for /l %%i in (1,1,100) do (
  4.                 ::call调用的时候不要忘记:
  5. call :rand %%i %max% %min%
  6. )
  7. pause&goto exit
  8. ::  :rand函数的定义
  9. :rand
  10. set /a ran=%random%%%(%2-%3+1)+%3
  11. echo 第%1个随机数:%ran%
  12. goto :eof
  13. :exit
  14. exit
复制代码
附带我对call的一些粗浅的理解:
call :标号  【参数列表】 注意我代码中的%1代表:rand这个函数的第一个参数,也就是for循环里面的%%i
其他依次类推 特别注意的是%0代表:rand本身而不是第一个参数 呵呵 刚开始我也犯了这个错误:用%0来引用第一个参数
例外我觉得call的使用有点类似于汇编中的call
作者: huomingpang    时间: 2011-4-30 20:57

好,学习啦     积累的少啊
作者: common    时间: 2011-6-13 22:25

  1. @echo off
  2. ::setlocal enabledelayedexpansion
  3. :1
  4. set a=%random%
  5. if %a% lss 100 goto :1
  6. if %a% gtr 200 goto :1
  7. echo %a%
  8. pause>nul
复制代码

作者: 牟头人    时间: 2011-6-16 12:37

高手如云啊
作者: cxmzlxb    时间: 2011-6-18 16:00

这个不错,挺简的!
作者: welllib    时间: 2011-6-24 08:59

本帖最后由 welllib 于 2011-6-24 09:05 编辑
  1. @echo off
  2. :start
  3. if %random% lss 10 (echo. 10%random%) else (echo. 1%random:~-2%)
  4. ping -n 2 127.1 >nul
  5. goto start
复制代码
以下为主要代码解释,方便第一次接触BAT的:
(1) if %random% lss 10 (echo. 10%random%) else (echo. 1%random:~-2%)
    如果随机a数小于10,显示10a,否则显示1(随机数后两位)
    例如:随机数为2,显示102;随机数为13234,显示134
(2) ping -n 2 127.1 >nul
延时器,ping 127.1两次
两次ping之间时间间隔为1s
作者: welllib    时间: 2011-6-24 09:08

改成如下@echo off
:eo
cls
echo 1%random:~-1%%random:~-1%
pause
goto :eo
wxcute 发表于 2008-10-1 19:32

这个方法不错,哈哈,我怎么就没想到呢
作者: PCL505512957    时间: 2011-8-24 21:53

  1. @echo off
  2. set/a str=%random%%%200
  3. if %str% geq 100 echo %str%
  4. pause>nul
复制代码

作者: 597476418    时间: 2011-8-27 13:13

利用批处理不能处理小数的性质写一个:
  1. @echo off
  2. @set /a num=%random%/325+100
  3. @echo %num%
  4. @pause >nul
复制代码

作者: qc5111    时间: 2011-8-29 01:49

本帖最后由 qc5111 于 2011-9-8 01:13 编辑
  1. @echo off
  2. set /a a=%random%%%100+100
  3. echo %a%
  4. pause
复制代码

作者: qc5111    时间: 2011-9-8 01:14

哦,知道了
作者: birdsdeng    时间: 2011-9-15 01:06

set /a test=%random%%%100+100
作者: brim    时间: 2011-9-23 01:34

200以内的随机数
  1. @echo off
  2. set/a num=%random%%%200
  3. echo %num%
  4. pause
复制代码

作者: 六道众生    时间: 2011-10-23 16:14

  1. @echo off
  2. :1
  3. set p=%random%
  4. if  %p%lss100 goto 1
  5. if  %p% lss 200 (
  6.     echo %p%
  7.     ) else (
  8.     goto 1
  9. )
  10. pause
复制代码

作者: zaixinxiangnian    时间: 2011-10-23 17:29

  1. @echo off
  2. :a
  3. set/a w=%random%%%200
  4. if not %w% lss 100 (echo %w%) else goto a
  5. pause
复制代码

作者: wjx79my    时间: 2011-10-27 13:00

学习中。都是人才啊。目的都实现。方法各不同。
作者: bat爱好者    时间: 2013-1-12 15:58

  1. @echo off
  2. set /a a=%random%%%100+101
  3. echo %a%
  4. pause>nul
复制代码

作者: qq399254368    时间: 2013-5-31 13:54

我想问一下,能不能用for /l %%i in (100,1,200) do
然后从里面随机抽一个,可以的话后面应该怎么写?谢谢!
作者: sincere    时间: 2013-7-30 07:20

本帖最后由 sincere 于 2013-7-30 11:09 编辑
  1. @echo off
  2. set min=%1
  3. set max=%2
  4. if %min% equ %max% (echo %min%) & exit /b
  5. if %min% gtr %max% (set min=%max%) & (set max=%min%)
  6. echo %min% + %random% %% (%max% - %min% + 1)
复制代码

作者: Jay罗小尼    时间: 2013-8-2 10:19

@echo off
set /a i=%random%%%100+100
echo %i%
pause
作者: BHsolve    时间: 2013-12-30 15:33

  1. @echo off
  2. set /a a=%random%%%101+100
  3. echo %a%
  4. pause > nul
复制代码

作者: 1020878754    时间: 2014-2-9 22:21

set /a w=100+%random%%%100
作者: clsgalmc    时间: 2015-5-9 22:20

@echo off
set /a day=%random% %%200
echo %day%
pause>nul
作者: 437153    时间: 2015-6-8 16:23

  1. @echo off
  2. :1
  3. set/a m=1%time:~-2%
  4. echo %m%
  5. pause >nul
  6. goto :1
复制代码
群里讨论了,严格意义上不算随机。
作者: bluenightsky    时间: 2015-8-12 18:04

能用最短的批处理代码 实现 128位的 指定某些字符串的 字符串吗 我想加密我的软件要用
作者: wutarnow    时间: 2015-10-15 22:39

回复 1# youxi01
  1. @echo off
  2.     call :CreateRandom
  3.     echo %createRandom%
  4. goto :EOF
  5. :CreateRandom
  6. set createRandom=%RANDOM%
  7. if %createRandom% LSS 100 (
  8.     goto :CreateRandom
  9. ) else if %createRandom% LEQ 200 (
  10.     exit /b
  11. ) else (
  12.     goto :CreateRandom
  13. )
复制代码

作者: unknown_world    时间: 2015-10-17 17:46

写了个范围内产生随机数的代码,请大家给点意见
  1. @echo off
  2. set /p fist=请输入您的随机数开始值:
  3. set /p end=请输入您的随机数结束值:
  4. :loop
  5. set /a w=%random% %% (end+1)
  6. if %w% geq %fist% (echo %w%) else goto loop
  7. pause>nul
复制代码

作者: Alt32    时间: 2017-8-9 20:08

使用if判断:
  1. @echo off
  2. color f0
  3. :eee
  4. set randomed=%random%
  5. if %randomed% lss 100 goto eee
  6. if %randomed% gtr 200 goto eee
  7. echo %randomed%
  8. set randomed=
  9. pause>nul
  10. exit
复制代码

作者: yhcfsr    时间: 2017-12-2 23:34

回复 4# youxi01

原来是取余
作者: wtuldn    时间: 2018-1-3 12:54

@echo off
:loop
set /a num=%random%%%200+1
echo %num%
pause>nul
goto loop
作者: 懒虫阿布    时间: 2018-7-22 18:46

  1. @echo off
  2. REM 产生一个100-200 之间的随机数
  3. setlocal enabledelayedexpansion
  4. set /a var1=%random% %% 200
  5. if %var1% LSS 100 (
  6. set /a var1=!var1!+100
  7. )
  8. echo var1=!var1!
复制代码

作者: impk    时间: 2019-8-31 22:37

  1. @echo off
  2. set /a w=%random% %% 100 + 100
  3. echo %w%
  4. pause
复制代码

作者: 唯尘    时间: 2022-10-26 10:52

@echo off
:a
set /a var=%random% %% 101+100
echo %var%
pause>nul & goto :a
作者: 772074834    时间: 2023-5-4 19:03

@echo off
set /a rd=%random% %% 100 + 100
echo rd=%rd%
pause




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2