标题: [文本处理] 求批处理每次打开bat自动用4位随机数替换 [打印本页]
作者: crazy014 时间: 2022-12-31 15:19 标题: 求批处理每次打开bat自动用4位随机数替换
- @echo off
- cls
- :start
- echo 7022
- pause
- goto :next
- :next
- echo 7022
- pause
复制代码
我想实现的是每次打开上述bat时,都可以自动用一个4位随机数替换两处“7022”.这怎么弄?求教!!而且上述bat我会把它转换为.exe运行,还想要有自动替换的功能
作者: HOPE2021 时间: 2022-12-31 15:39
回复 1# crazy014
这样可以吗?- @Echo Off
- Cls
-
- :Start
- %= 下面一行代码产生一个小于 9000 的随机数,并加上 1000,就是任意的四位数 =%
- Set /A "Rand=1000+%Random%%%9000"
- Echo.%Rand%
- Pause
- @Goto :Next
-
- :Next
- Echo.%Rand%
- 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七
如果利用变量延迟的特性,叠加取平均值,效果会更好,如:- @Echo Off
- Cls
-
- :Start
- %= 下面一行代码产生三个小于 3000 的随机数,并加上 1000,就是任意的四位数 =%
- Set /A "Rand=1000+%Random%%%3000+%Random%%%3000+%Random%%%3000"
- Echo.%Rand%
- Pause
- @Goto :Next
-
- :Next
- Echo.%Rand%
- 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
- Set /A "Rand=1000+%Random%%%9000"
复制代码
这个写两行,也解决了
作者: Batcher 时间: 2023-1-1 12:01
回复 5# 77七 - @echo off
- setlocal enabledelayedexpansion
-
- :Loop
- set /a "rand=1000+!random!%%9000"
- echo,%rand%
- pause
- 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 - @echo off
- set /a "n=(%random%%%9+1)*1000+%random%%%1000"
- echo,%n%
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |