Board logo

标题: [文本处理] 求批处理每次打开bat自动用4位随机数替换 [打印本页]

作者: crazy014    时间: 2022-12-31 15:19     标题: 求批处理每次打开bat自动用4位随机数替换

  1. @echo off
  2. cls
  3. :start
  4. echo 7022
  5. pause
  6. goto :next
  7. :next
  8. echo 7022
  9. pause
复制代码
我想实现的是每次打开上述bat时,都可以自动用一个4位随机数替换两处“7022”.这怎么弄?求教!!而且上述bat我会把它转换为.exe运行,还想要有自动替换的功能
作者: HOPE2021    时间: 2022-12-31 15:39

回复 1# crazy014
这样可以吗?
  1. @Echo Off
  2. Cls
  3. :Start
  4. %= 下面一行代码产生一个小于 9000 的随机数,并加上 1000,就是任意的四位数 =%
  5. Set /A "Rand=1000+%Random%%%9000"
  6. Echo.%Rand%
  7. Pause
  8. @Goto :Next
  9. :Next
  10. Echo.%Rand%
  11. Pause
复制代码

作者: crazy014    时间: 2022-12-31 15:40

我去试试,谢谢你
作者: HOPE2021    时间: 2022-12-31 15:46

回复 3# crazy014
不客气!
作者: 77七    时间: 2022-12-31 17:02

回复 4# HOPE2021

我不断打开关闭,为什么显示的都是相近的数,还有点规律...这个是停顿了两三次
17:00:32.52
1539
17:00:35.18
1549
17:00:37.41
1555
17:00:39.34
1562
17:00:41.35
1568
17:00:55.24
1614
17:00:57.46
1621
17:00:59.51
1627
17:01:01.89
1634
17:01:34.02
1738
17:01:36.01
1745
17:01:38.29
1754
17:01:40.39
1761

作者: 77七    时间: 2022-12-31 17:06

回复 4# HOPE2021

好像和代码没关系,电脑产生的随机数就是这样?我单独一个  echo %Random%  也是相近的
作者: HOPE2021    时间: 2022-12-31 17:15

回复 6# 77七
%Random%是根据时间来生成随机数的,所以在短时间内会很相近
作者: HOPE2021    时间: 2022-12-31 17:19

回复 6# 77七
如果利用变量延迟的特性,叠加取平均值,效果会更好,如:
  1. @Echo Off
  2. Cls
  3. :Start
  4. %= 下面一行代码产生三个小于 3000 的随机数,并加上 1000,就是任意的四位数 =%
  5. Set /A "Rand=1000+%Random%%%3000+%Random%%%3000+%Random%%%3000"
  6. Echo.%Rand%
  7. Pause
  8. @Goto :Next
  9. :Next
  10. Echo.%Rand%
  11. Pause
复制代码

作者: 77七    时间: 2022-12-31 17:19

回复 7# HOPE2021

但是在一个批处理里面设置一个循环,生成很多个随机数,又是真随机了;如果多次点开批处理,只生成一个,又是相近的,好神奇。
作者: HOPE2021    时间: 2022-12-31 17:21

回复 9# 77七
大多数编程语言的随机数生成都是先取一个数据(如时间),然后每次取随机数都是在上一次的基础上进行运算,差别就很大了
作者: 77七    时间: 2022-12-31 17:23

回复 10# HOPE2021
  1. Set /A "Rand=1000+%Random%%%9000"
复制代码
这个写两行,也解决了
作者: Batcher    时间: 2023-1-1 12:01

回复 5# 77七
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :Loop
  4. set /a "rand=1000+!random!%%9000"
  5. echo,%rand%
  6. pause
  7. goto :Loop
复制代码

作者: 77七    时间: 2023-1-1 12:29

回复 12# Batcher

大佬,我试了,如果不断打开关闭,结果还是一样,产生的都是相近的数字
12:16:41.74
4461
12:16:46.10
4477
12:16:48.19
4484
12:16:50.20
4490
12:16:52.05
4497
12:16:53.99
4500

按实际使用场景,是不用每次打开关闭的。
但是理论上不断打开、关闭批处理,如何避免产生相近数字呢?
作者: czjt1234    时间: 2023-1-1 12:37

先平方再取后四位
作者: 77七    时间: 2023-1-1 12:53

本帖最后由 77七 于 2023-1-1 12:57 编辑

回复 14# czjt1234
这样随机的范围应该变小了吧?比如我随机这个数目的是看尾数是不是3?包括上面的答案,范围也都是缩小了的,1000以内的 就产生不了,比如这四位数是一万个人的工号,从0000-9999,也不符合实际场景了
作者: czjt1234    时间: 2023-1-1 21:41

回复 15# 77七


   n * (n+1)
取最后5位数字的前4位,这样总可以了吧
作者: 77七    时间: 2023-1-1 22:51

回复 16# czjt1234
的确产生了一个随机数,估计没什么实际应用意义
假如是尾数为3中奖,你能预估下中奖率吗?
作者: qixiaobin0715    时间: 2023-1-4 08:21

本帖最后由 qixiaobin0715 于 2023-1-4 09:32 编辑

回复 1# crazy014
  1. @echo off
  2. set /a "n=(%random%%%9+1)*1000+%random%%%1000"
  3. echo,%n%
  4. pause
复制代码





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