中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-05 22:01
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如果列举出由随机数字加随机字母组成的4位组合 查看 1,012 回复 14
楼 主 [求助]如果列举出由随机数字加随机字母组成的4位组合 发表于 2007-09-20 20:21 ·  中国 湖南 长沙 电信
初级用户
★★
积分 103
发帖 52
注册 2007-04-13 05:20
19年会员
UID 84975
性别 男
状态 离线
一个任意数,由两个数字加两个字母组成
如2r3p
i4e5
q56i
这样的组合如何列举?并保存到一个TXT中做变量
在BBS上搜索了随机关键字
无解。。。
谢谢大大们了
2 发表于 2007-09-20 20:39 ·  中国 广东 广州 白云区 电信
初级用户
★★
积分 132
发帖 59
注册 2007-08-23 21:24
18年会员
UID 95705
性别 男
来自 GuangZhou
状态 离线
@echo off
setlocal enabledelayedexpansion
set str1=abcdefghijklmnopqrstuvwxyz
set str2=0123456789
set /a char1=%random%%%26
set /a num2=%random%%%10
set /a char2=%random%%%26
set /a num2=%random%%%10
echo !str2:~%num1%,1!!str1:~%char1%,1!!str2:~%num2%,1!!str1:~%char2%,1!
pause
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
knoppix7 +4 2007-09-20 20:51
flybird2020 +2 2007-09-20 21:14
3 发表于 2007-09-20 21:12 ·  中国 湖南 长沙 电信
初级用户
★★
积分 103
发帖 52
注册 2007-04-13 05:20
19年会员
UID 84975
性别 男
状态 离线
Originally posted by Nickey at 2007-9-20 08:39 PM:
@echo off
setlocal enabledelayedexpansion
set str1=abcdefghijklmnopqrstuvwxyz
set str2=0123456789
set /a char1=%random%%%26
set /a num2=%random%%%10
set /a char2=%random%%%26
set /a num2=%ra ...

谢谢大大
假如我想列举可能所有的随机数值到1.TXT的话怎么写呢。。。
4 发表于 2007-09-20 21:14 ·  中国 湖南 长沙 电信
初级用户
★★
积分 103
发帖 52
注册 2007-04-13 05:20
19年会员
UID 84975
性别 男
状态 离线
可以了,谢谢大大~
5 发表于 2007-09-21 03:39 ·  中国 广东 广州 白云区 电信
初级用户
★★
积分 172
发帖 54
注册 2007-01-02 10:38
19年会员
UID 75260
性别 男
状态 离线
楼主,你标题是”如何列举出由随机数字加随机字母组成的4位组合“
但是根据你的描述,你是要两个随机数字+两个随机字母(小写),然后再将这四个字符进行随机组合?!是不是这样先?
首先,字母大小写没多大关系的
然后,2楼给的的解决方法不太准确,他怎么就知道获取出来的两个数字和两个字母要怎么组合啊,那是根据他个人主观想法,排列为:
数字+字母+数字+字母
最后,根据你的要求,我给出相应的解决方案:

以下代码没有考虑随机取到的字母或者数字是否重复,其实取到重复是正常的。


@echo off
setlocal EnableDelayedExpansion
set a=abcdefghijklmnopqrstuvwxyz
set b=0123456789
set/a char1=%random%%%26
set/a char2=%random%%%26
set/a num1=%random%%%10
set/a num2=%random%%%10
set "combine=!a:~%char1%,1!!a:~%char2%,1!!b:~%num1%,1!!b:~%num2%,1!"
echo 人为地为四个字符指定一个临时组合是: %combine%
set c=0
:loop
set/a rnd=%random%%%4
if %c% neq 4 (
if not defined kumho%rnd% (
set kumho%rnd%=rnd
set num=%num%%rnd%
set/a c+=1
)
goto loop
)
echo 为临时组合中各个字符随机获取排序位置是: %num%
:: 变量A的值代表临时组合中的第几个字符作为新的随机组合中的第一个字符
:: 变量B的值代表临时组合中的第几个字符作为新的随机组合中的第二个字符
:: 变量C的值代表临时组合中的第几个字符作为新的随机组合中的第三个字符
:: 变量D的值代表临时组合中的第几个字符作为新的随机组合中的第四个字符
set A=%num:~0,1%
set B=%num:~1,1%
set C=%num:~2,1%
set D=%num:~3,1%
echo 真正的随机组合是: !combine:~%A%,1!!combine:~%B%,1!!combine:~%C%,1!!combine:~%D%,1!
pause>nul


如果不想获取的随机字母和数字有重复现象,则修改一下前面部分的代码即可。


@echo off
setlocal EnableDelayedExpansion
set a=abcdefghijklmnopqrstuvwxyz
set b=0123456789
set/a char1=%random%%%26
:repeat1
set/a char2=%random%%%26
if "%char1%"=="%char2%" goto repeat1
set/a num1=%random%%%10
:repeat2
set/a num2=%random%%%10
if "%num1%"=="%num2%" goto repeat2


[ Last edited by dosmania on 2007-9-21 at 04:09 AM ]
本帖最近评分记录 (共 2 条) 点击查看详情
评分人分数时间
wudixin96 +9 2007-09-21 08:46
flybird2020 +2 2007-09-21 08:50
6 发表于 2007-09-21 08:46 ·  中国 香港 腾讯云
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线
5楼说的不错,如果给2楼都能加6分,那么偶给你加9分,o(∩_∩)o...哈哈
7 发表于 2007-09-21 08:51 ·  中国 湖南 长沙 电信
初级用户
★★
积分 103
发帖 52
注册 2007-04-13 05:20
19年会员
UID 84975
性别 男
状态 离线
谢谢各位大大,收藏代码ING
8 发表于 2007-09-21 09:38 ·  中国 江苏 无锡 电信
初级用户
积分 92
发帖 42
注册 2007-08-14 09:14
18年会员
UID 95100
性别 男
来自 重庆市巫山县
状态 离线
原先写过一个大小写字母+数字的生成11位以内的随机组合,你这个和那个同理。

@echo off
setlocal enabledelayedexpansion
set str1=abcdefghijklmnopqrstuvwxyz
set str2=ABCDEFGHIJKLMNOPQRSTUVWXYZ
set str3=0123456789
type nul>dic.txt
set a=
set n=
set /p n=你想要生成多少组数据?
echo 正在生成字典文件,请稍候...
:start
set /a a+=1
:zero
set dic=
set /a rd=%random%%%12
for /l %%i in (1,1,%rd%) do (
call :rdstr
set /a rdn=!random!%%3
call set dic=!dic!%%str:~!rdn!,1%%
)
if "!dic!"=="" goto zero
echo !dic!>>dic.txt
if "%n%"=="%a%" goto ok
goto :start

:ok
echo 创建完成!任意键打开.
pause>nul
notepad dic.txt
endlocal
goto:eof

:rdstr
set /a rd=%random%%%26
set strl=!str1:~%rd%,1!
set /a rd=%random%%%26
set stru=!str2:~%rd%,1!
set /a rd=%random%%%10
set strn=!str3:~%rd%,1!
set str=!strl!!stru!!strn!
goto :eof


[ Last edited by yovie on 2007-9-21 at 09:41 AM ]
拾人牙慧者!
9 发表于 2007-09-21 14:30 ·  中国 广东 广州 天河区 电信
初级用户
★★
积分 172
发帖 54
注册 2007-01-02 10:38
19年会员
UID 75260
性别 男
状态 离线
TO wudixin96:

多谢鼓励,楼主给的分是少了点,没什么诚意啊,哈哈``开玩笑``

To 8 楼:

8 楼的代码跟楼主要求的根本两回事...
而且跟我的方法也不尽相同
”大小写字母+数字的生成11位以内的随机组合“ 这个生成的随机字符个数是无法控制的,当然最多是11个。总之随便看下都知道跟楼主要求的有很大差别。

[ Last edited by dosmania on 2007-9-21 at 02:31 PM ]
10 发表于 2007-09-21 14:35 ·  中国 香港 腾讯云
银牌会员
★★★
积分 1,928
发帖 931
注册 2007-01-06 11:46
19年会员
UID 75624
性别 男
状态 离线


11 发表于 2007-09-21 15:15 ·  中国 广东 东莞 电信
初级用户
积分 32
发帖 17
注册 2007-09-21 14:17
18年会员
UID 97962
性别 男
状态 离线
看来这有太多的高手,加紧学习中。。。
12 发表于 2007-09-21 23:37 ·  中国 四川 自贡 电信
初级用户
游荡的孤魂
积分 79
发帖 29
注册 2007-04-02 11:08
19年会员
UID 83714
性别 男
来自 湖南
状态 离线
我也来一段代码凑热闹:

@echo off
setlocal enabledelayedexpansion
set str1=0123456789
set str2=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

:loop
for /l %%i in (1,1,2) do (
set /a rnd1=!random!%%10
set /a rnd2=!random!%%52
call set str3=!str3! !random!_%%str1:~!rnd1!,1%%
call set str4=!str4! !random!_%%str2:~!rnd2!,1%%
)
set num=0
for %%i in (%str3% %str4%) do (
set /a num+=1
set var_%%i_!num!=%%i_!num!
)
for /f "tokens=3 delims=_" %%i in ('set var_') do set /p=%%i<nul
echo.
for /f "delims==" %%i in ('set var_') do set %%i=
set str3=&set str4=
pause
goto loop
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
dosmania +2 2007-09-22 00:05
13 发表于 2007-09-22 00:01 ·  中国 广东 广州 白云区 电信
初级用户
★★
积分 172
发帖 54
注册 2007-01-02 10:38
19年会员
UID 75260
性别 男
状态 离线
强啊~~~
不足之处是没有排除重复现象`和效率应该没我那个高,你用了好多For
digger,有兴趣研究一下猜数字游戏的贴子
http://www.cn-dos.net/forum/viewthread.php?tid=33747&fpage=1
猜数字贴比较有吸引力啊``
这个贴子就告一段落吖``

[ Last edited by dosmania on 2007-9-22 at 12:03 AM ]
14 发表于 2007-09-22 00:47 ·  中国 四川 自贡 电信
初级用户
游荡的孤魂
积分 79
发帖 29
注册 2007-04-02 11:08
19年会员
UID 83714
性别 男
来自 湖南
状态 离线
效率的高低,并不在于for的多少。
如果你的运气不好,连续N次取到的rnd值都是同一个数字的时候,势必会一直执行 goto loop 语句;如果你真的中了大奖,呵呵,传说中的死循环就出现了。
一直以来,教我的数学老师都不是美女,不玩数字游戏也罢。
15 发表于 2007-09-22 03:12 ·  中国 广东 广州 白云区 电信
初级用户
★★
积分 172
发帖 54
注册 2007-01-02 10:38
19年会员
UID 75260
性别 男
状态 离线
我运气一向很好,就算我运气不好,也不关我事,代码是写给楼主用的,你去问问楼主运气好不好吖``
哈哈,这个死 digger,这番话我看着怎么就这么耳熟啊,别跟我说你不是飞扬,哈哈
看着那些算法也像我上次在群里问你的那些,被我揭穿了,快加分我!!!!

[ Last edited by dosmania on 2007-9-22 at 03:13 AM ]
论坛跳转: