中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 11:25
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 原创彩票选号器 查看 1,856 回复 17
楼 主 原创彩票选号器 发表于 2008-03-27 17:00 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
  今天看到同事在为买彩票选号码,一时心血来潮写了这个P。由于本人不玩彩票,因此不熟悉其中的规则,肯定还有许多要改进的地方,就有劳有心人了。
(注:有个思路将以前的中奖号码全存进txt,在批处理中加入查找所选号码,如以前有的就重选一次)
提示:17楼为更新后的不生成临时文件并加入次数限制和密码认证的完善版
@echo off&color 5f&mode con cols=50 lines=8
title 彩票号码选取器
:begin
if exist n.txt del n.txt
cd. >n.txt
cls
set a=35
echo.&echo.&echo.
set /p a=请输入在多少个数中选择(默认回车为35):
set /a a=a+1
cls
set b=7
echo.&echo.&echo.
set /p b=请输入选择多少个数(默认回车为7):
for /l %%i in (1,1,%b%) do call :select
cls
set /p namber=<n.txt
find "%namber%" a.txt >nul
if errorlevel 1 goto show
if errorlevel 0 goto begin
:show
echo.&echo.&echo. >n.txt
echo 选择出的号码为:%namber% >>n.txt
type n.txt
pause&del n.txt
cls
echo.&echo.&echo.
echo     选择完毕,请按任意键退出!
pause >nul&goto :eof
:select
set /p str=<n.txt
set /a n=%random%%%a
if %n% equ 0 goto select
find "%n%" n.txt >nul
if errorlevel 1 echo %str%%n% >n.txt&goto :eof
if errorlevel 0 goto select


[ Last edited by zw19750516 on 2008-3-29 at 04:45 AM ]
批处理之家新域名:www.bathome.net
2 发表于 2008-03-27 17:23 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
怎么没有彩票爱好者来发表下意见吗,有了建议我好改进啊。
批处理之家新域名:www.bathome.net
3 发表于 2008-03-27 17:52 ·  中国 北京 联通
中级用户
★★
替身
积分 269
发帖 130
注册 2007-03-23 21:41
19年会员
UID 82683
性别 女
状态 离线
弱弱的问一句,能中奖吗?.......................
4 发表于 2008-03-27 18:23 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
Originally posted by ansipeter at 2008-3-27 17:52:
弱弱的问一句,能中奖吗?.......................

我写这个P只是为了好玩为了提高,不是为了中奖,彩票这东东我不玩的,呵呵呵。。。。
批处理之家新域名:www.bathome.net
5 发表于 2008-03-27 22:10 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
使用set /a n=%random%%%a+1就可以得出1-35的数
修改一下不使用临时文件的脚本:
@echo off&color 5f&mode con cols=50 lines=8
title 彩票选号器
cls
set a=35
echo.&echo.&echo.
set /p a=请输入在多少个数中选择(默认回车为35):
cls
set b=7
echo.&echo.&echo.
set /p b=请输入选择多少个数(默认回车为7):
:loop
set /a n=%random%%%a+1
for %%i in ("%str%") do if "%n%" == "%%i" goto loop
set str=%str% %n%
set /a m+=1
if %m% lss %b% goto loop

cls
echo.&echo.&echo.
echo 选择出的号码为: %str%
pause>nul
cls
echo.&echo.&echo.
echo     选择完毕,请按任意键退出!
pause>nul
6 谢谢指点,又学了一招! 发表于 2008-03-27 22:21 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
但你好像忽视了数字为0的情况,应在:loop中加入对0的判断
:loop
set /a n=%random%%%a+1
if %n% equ 0 goto loop
for %%i in ("%str%") do if "%n%" == "%%i" goto loop
set str=%str% %n%
set /a m+=1
if %m% lss %b% goto loop
批处理之家新域名:www.bathome.net
7 发表于 2008-03-27 22:36 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
你没看仔细,这句决不会出现小于1的数
set /a n=%random%%%a+1

你原来的set /a n=%random%%%a却不能产生最大数(如输入的35)

[ Last edited by zh159 on 2008-3-27 at 10:37 PM ]
8 发表于 2008-03-27 22:40 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
啊,明白了,+1是对前面产生数的+1,再次受教!
批处理之家新域名:www.bathome.net
9 发表于 2008-03-28 12:00 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
晕,经测试发现这样会有重复的数出现,问题应该还是出在loop中
批处理之家新域名:www.bathome.net
10 发表于 2008-03-28 13:42 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
for %%i in ("%str%") do if "%n%" == "%%i" goto loop
问题出在这里,%str% 不应该加引号
致精致简!
11 多谢26933062,向你学习! 发表于 2008-03-28 13:51 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
谢谢了,thank you very much,现修改如下:
@echo off&color 5f&mode con cols=50 lines=8
title 彩票选号器
cls
set a=35
echo.&echo.&echo.
set /p a=请输入在多少个数中选择(默认回车为35):
cls
set b=7
echo.&echo.&echo.
set /p b=请输入选择多少个数(默认回车为7):
:loop
set /a n=%random%%%a+1
for %%i in (%str%) do if "%n%" == "%%i" goto loop
set str=%str% %n%
set /a m+=1
if %m% lss %b% goto loop
cls
echo.&echo.&echo.
echo 选择出的号码为: %str%
pause>nul
cls
echo.&echo.&echo.
echo     选择完毕,请按任意键退出!
pause>nul
批处理之家新域名:www.bathome.net
12 发表于 2008-03-28 13:52 ·  中国 浙江 嘉兴 平湖市 电信
初级用户
★★
积分 157
发帖 67
注册 2007-05-13 11:03
19年会员
UID 88378
性别 男
状态 离线
这东西好有趣,学习了。
13 加强版(加入了次数限制和认证密码): 发表于 2008-03-28 14:35 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
@echo off&color 5f&mode con cols=50 lines=8
title 彩票号码选取器
if exist a.txt goto run
echo 0 >a.txt
:run
echo.&echo.&echo.
set /p password=请输入进入密码:
if "%password%"=="cn-dos.net" goto begin
set /p a=<a.txt
set /a a+=1
set /a b=5-a
echo %a% >a.txt
if %a% geq 5 goto wrong
cls
echo.&echo.&echo.
echo 由于没正确输入密码,你仅能使用5次,现在还剩%b%次
ping /n 3 127.1 >nul
:begin
if exist n.txt del n.txt
cd. >n.txt
cls
set a=35
echo.&echo.&echo.
set /p a=请输入在多少个数中选择(默认回车为35):
cls
set b=7
echo.&echo.&echo.
set /p b=请输入选择多少个数(默认回车为7):
:loop
set /a n=%random%%%a+1
for %%i in (%str%) do if "%n%" == "%%i" goto loop
set str=%str% %n%
set /a m+=1
if %m% lss %b% goto loop
cls
echo.&echo.&echo.
echo 选择出的号码为: %str%
pause
cls
echo.&echo.&echo.
echo     选择完毕,请按任意键退出!
pause >nul&goto :eof
:wrong
cls
echo.&echo.&echo.
echo 对不起,你无权再使用本软件!
ping /n 3 127.1 >nul
goto :eof


[ Last edited by zw19750516 on 2008-3-28 at 02:40 PM ]
批处理之家新域名:www.bathome.net
14 发表于 2008-03-28 20:08 ·  中国 江苏 常州 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
Originally posted by zw19750516 at 2008-3-28 14:35:
@echo off&color 5f&mode con cols=50 lines=8
title 彩票号码选取器
if exist a.txt goto run
echo 0 >a.txt
:run
echo.&echo.&echo.
set /p password=请输入进入密 ...



实际上代码就是获得%n%个的不同随机数
代码里的对比判断有效率问题

不如这样处理:
set /p b=请输入选择多少个数(默认回车为7):
:loop
set /a n=%random%%%a+1
if defined %n% goto loop
set str=%str% %n%
set %n%=A
set /a m+=1
if %m% lss %b% goto loop
简单!简单!再简单!
15 发表于 2008-03-28 20:23 ·  中国 山东 青岛 联通
初级用户
★★
积分 107
发帖 60
注册 2007-11-07 22:03
18年会员
UID 102010
性别 男
状态 离线
不错,又学到东西了!
论坛跳转: