中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如果列举出由随机数字加随机字母组成的4位组合
作者:
标题: [求助]如果列举出由随机数字加随机字母组成的4位组合 上一主题 | 下一主题
flybird2020
初级用户





积分 103
发帖 52
注册 2007-4-13
状态 离线
『楼 主』:  [求助]如果列举出由随机数字加随机字母组成的4位组合

一个任意数,由两个数字加两个字母组成
如2r3p
i4e5
q56i
这样的组合如何列举?并保存到一个TXT中做变量
在BBS上搜索了随机关键字
无解。。。
谢谢大大们了

2007-9-20 20:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Nickey
初级用户




积分 132
发帖 59
注册 2007-8-23
来自 GuangZhou
状态 离线
『第 2 楼』:  

@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

   此帖被 +6 点积分          点击查看详情   
评分人:【 knoppix7 分数: +4  时间:2007-9-20 20:51
评分人:【 flybird2020 分数: +2  时间:2007-9-20 21:14


2007-9-20 20:39
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (375600651)  编辑帖子  回复  引用回复
flybird2020
初级用户





积分 103
发帖 52
注册 2007-4-13
状态 离线
『第 3 楼』:  



  Quote:
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的话怎么写呢。。。

2007-9-20 21:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flybird2020
初级用户





积分 103
发帖 52
注册 2007-4-13
状态 离线
『第 4 楼』:  

可以了,谢谢大大~

2007-9-20 21:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『第 5 楼』:  

楼主,你标题是”如何列举出由随机数字加随机字母组成的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 ]

   此帖被 +11 点积分        点击查看详情   
评分人:【 wudixin96 分数: +9  时间:2007-9-21 08:46
评分人:【 flybird2020 分数: +2  时间:2007-9-21 08:50


2007-9-21 03:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 6 楼』:  

5楼说的不错,如果给2楼都能加6分,那么偶给你加9分,o(∩_∩)o...哈哈

2007-9-21 08:46
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flybird2020
初级用户





积分 103
发帖 52
注册 2007-4-13
状态 离线
『第 7 楼』:  

谢谢各位大大,收藏代码ING

2007-9-21 08:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yovie
初级用户




积分 92
发帖 42
注册 2007-8-14
来自 重庆市巫山县
状态 离线
『第 8 楼』:  

原先写过一个大小写字母+数字的生成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 ]



拾人牙慧者!
2007-9-21 09:38
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (109232975)  编辑帖子  回复  引用回复
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『第 9 楼』:  

TO wudixin96:

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

To 8 楼:

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

[ Last edited by dosmania on 2007-9-21 at 02:31 PM ]

2007-9-21 14:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wudixin96
银牌会员





积分 1928
发帖 931
注册 2007-1-6
状态 离线
『第 10 楼』:  





2007-9-21 14:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
npgmis
初级用户





积分 32
发帖 17
注册 2007-9-21
状态 离线
『第 11 楼』:  

看来这有太多的高手,加紧学习中。。。

2007-9-21 15:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
digger
初级用户

游荡的孤魂



积分 79
发帖 29
注册 2007-4-2
来自 湖南
状态 离线
『第 12 楼』:  

我也来一段代码凑热闹:
@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


   此帖被 +2 点积分    点击查看详情   
评分人:【 dosmania 分数: +2  时间:2007-9-22 00:05


2007-9-21 23:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『第 13 楼』:  

强啊~~~
不足之处是没有排除重复现象`和效率应该没我那个高,你用了好多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 ]

2007-9-22 00:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
digger
初级用户

游荡的孤魂



积分 79
发帖 29
注册 2007-4-2
来自 湖南
状态 离线
『第 14 楼』:  

效率的高低,并不在于for的多少。
如果你的运气不好,连续N次取到的rnd值都是同一个数字的时候,势必会一直执行 goto loop 语句;如果你真的中了大奖,呵呵,传说中的死循环就出现了。
一直以来,教我的数学老师都不是美女,不玩数字游戏也罢。

2007-9-22 00:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
dosmania
初级用户





积分 172
发帖 54
注册 2007-1-2
状态 离线
『第 15 楼』:  

我运气一向很好,就算我运气不好,也不关我事,代码是写给楼主用的,你去问问楼主运气好不好吖``
哈哈,这个死 digger,这番话我看着怎么就这么耳熟啊,别跟我说你不是飞扬,哈哈
看着那些算法也像我上次在群里问你的那些,被我揭穿了,快加分我!!!!

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

2007-9-22 03:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: