找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 62024|回复: 17

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

[复制链接]
发表于 2022-12-31 15:19:07 | 显示全部楼层 |阅读模式
  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运行,还想要有自动替换的功能
发表于 2022-12-31 15:39:18 | 显示全部楼层
回复 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
复制代码
 楼主| 发表于 2022-12-31 15:40:19 | 显示全部楼层
我去试试,谢谢你
发表于 2022-12-31 15:46:37 | 显示全部楼层
回复 3# crazy014
不客气!
发表于 2022-12-31 17:02:55 | 显示全部楼层
回复 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
发表于 2022-12-31 17:06:56 | 显示全部楼层
回复 4# HOPE2021

好像和代码没关系,电脑产生的随机数就是这样?我单独一个  echo %Random%  也是相近的
发表于 2022-12-31 17:15:33 | 显示全部楼层
回复 6# 77七
%Random%是根据时间来生成随机数的,所以在短时间内会很相近
发表于 2022-12-31 17:19:27 | 显示全部楼层
回复 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
复制代码
发表于 2022-12-31 17:19:46 | 显示全部楼层
回复 7# HOPE2021

但是在一个批处理里面设置一个循环,生成很多个随机数,又是真随机了;如果多次点开批处理,只生成一个,又是相近的,好神奇。
发表于 2022-12-31 17:21:35 | 显示全部楼层
回复 9# 77七
大多数编程语言的随机数生成都是先取一个数据(如时间),然后每次取随机数都是在上一次的基础上进行运算,差别就很大了
发表于 2022-12-31 17:23:54 | 显示全部楼层
回复 10# HOPE2021
  1. Set /A "Rand=1000+%Random%%%9000"
复制代码
这个写两行,也解决了
发表于 2023-1-1 12:01:47 | 显示全部楼层
回复 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
复制代码
发表于 2023-1-1 12:29:46 | 显示全部楼层
回复 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

按实际使用场景,是不用每次打开关闭的。
但是理论上不断打开、关闭批处理,如何避免产生相近数字呢?
发表于 2023-1-1 12:37:10 | 显示全部楼层
先平方再取后四位
发表于 2023-1-1 12:53:55 | 显示全部楼层
本帖最后由 77七 于 2023-1-1 12:57 编辑

回复 14# czjt1234
这样随机的范围应该变小了吧?比如我随机这个数目的是看尾数是不是3?包括上面的答案,范围也都是缩小了的,1000以内的 就产生不了,比如这四位数是一万个人的工号,从0000-9999,也不符合实际场景了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:36 , Processed in 0.016239 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表