Board logo

标题: [其他] 批处理写的抽奖软件(2008-09-03更新) [打印本页]

作者: batman    时间: 2008-9-2 10:27     标题: 批处理写的抽奖软件(2008-09-03更新)

&&昨晚公司举行了一场演讲比赛,同时进行了现场幸运抽奖,软
件是我写的,发上来给大家看看:
窗口设置如下:
[attach]278[/attach]
[attach]279[/attach]
[attach]280[/attach]
[attach]281[/attach]
[attach]282[/attach]
更新后的软件如下(9月3日更新):
作者: loverwind    时间: 2008-9-2 10:53

怎么看不到源代码呢?
作者: wangwei4106    时间: 2008-9-2 10:58

是啊
我门要代码……
作者: batman    时间: 2008-9-2 11:12

呵呵,源码如下:
主程序
  1. @echo off&setlocal enabledelayedexpansion
  2. mode con cols=50 lines=10&color 1f
  3. title 幸运观众抽奖软件 made by batman
  4. for /f "delims=" %%i in (a.txt) do set /a total+=1
  5. set "m=0"&echo 中奖名单:>name.txt
  6. :begin
  7. for /f "tokens=2 delims= " %%i in ('tasklist^|findstr "cmd.exe"') do set "pid=%%i"&goto  next
  8. :next
  9. cls&echo.&echo          ========^> 幸运抽奖 ^<========
  10. echo.&echo       总共有%total%名现场观众参与抽奖
  11. if %m% equ 0 echo.&set /p num=      请输入要抽取的人数:
  12. echo %num%|findstr "[^0-9]">nul&&goto begin
  13. if %num% geq %total% goto begin
  14. echo.&echo          请按任意键开始抽奖&pause>nul
  15. :again
  16. start lp.exe&set /a v=num-m
  17. cls&echo.&echo          已抽取%m%名幸运观众,还剩余%v%名
  18. echo.&echo       名单正在滚动中...
  19. echo.&echo       请按任意键抽取幸运观众&pause>nul
  20. for /f "tokens=2 delims= " %%i in ('tasklist^|findstr "cmd.exe"') do (
  21.     if "%%i" neq "%pid%" taskkill /pid %%i /f>nul 2>nul
  22. )
  23. :loop
  24. set /a a=%random%%%%total%+1,n=0
  25. for /f "delims=" %%i in (a.txt) do (
  26.     set /a n+=1
  27.     if !n! equ %a% (
  28.        findstr "%%i" 中奖.txt>nul&&goto loop||set "str=%%i"
  29.     )
  30. )
  31. cls&echo.&echo.&echo       本次抽取的幸运观众是:%str%
  32. echo.&echo          请按任意键继续抽奖&pause>nul
  33. echo %str%>>name.txt
  34. set /a m+=1
  35. if %m% neq %num% goto again
  36. echo.&echo       所有幸运观众已抽取完毕,请按任意键退出
  37. pause>nul
复制代码

副程序
  1. @echo off&mode con cols=50 lines=5&color 1c
  2. title ***抽 奖 滚 动 窗 口***
  3. :lp
  4. for /f "delims=" %%a in (a.txt) do (
  5.     echo                    %%a
  6.     for /l %%i in (1,1,100) do echo>nul
  7. )
  8. goto lp
复制代码

作者: Batcher    时间: 2008-9-2 11:15

其实作为抽奖程序,最重要的是能够实现由领导决定谁获奖^_^
作者: batman    时间: 2008-9-2 21:50     标题: 更新一下

更新到可以设置奖项和获奖人数,最多可设置10个奖项,每个奖项最多抽取9人,抽奖名单存放
在num.txt,中奖名单存放在name.txt:
select.bat(主程序)
  1. @echo off&setlocal enabledelayedexpansion
  2. mode con cols=50 lines=10&color 1f
  3. title 幸运抽奖软件 made by batman
  4. for /f "delims=" %%i in (num.txt) do set /a total+=1
  5. set "m=0"&echo 中奖名单:>name.txt
  6. :begin
  7. for /f "tokens=2 delims= " %%i in ('tasklist^|findstr "cmd.exe"') do set "pid=%%i"&goto  next
  8. :next
  9. cls&echo.&echo          ========^> 幸运抽奖 ^<========
  10. echo.&echo       总共有%total%人参与抽奖
  11. echo.&set /p num=      请输入奖项数量(1-10):
  12. echo %num%|findstr "[^0-9]">nul&&goto next
  13. if %num% geq 1 if %num% leq 10 goto contin
  14. goto next
  15. :contin
  16. set "codes=一二三四五六七八九十"
  17. set "code=!codes:~,%num%!"&set "n=1"
  18. :lp
  19. set "a%n%=%code:~,1%"
  20. cls&echo.&echo.&echo.
  21. set /p num%n%=      请输入!a%n%!等奖要抽取的人数:
  22. echo !num%n%!|findstr "[^0-9]">nul&&goto lp
  23. set /a totals+=num%n%
  24. if %totals% geq %total% goto lp
  25. set "code=%code:~1%"&set /a n+=1
  26. if defined code goto lp
  27. cls&set /a n-=1
  28. for /l %%i in (1,1,%n%) do (
  29.     echo.&echo          设定!a%%i!等奖!num%%i!名
  30.     set "code1=!a%%i!!code1!"&set "code2=!num%%i!!code2!"
  31. )
  32. echo.&echo          请按任意键开始抽奖&pause>nul
  33. :again
  34. start lp.bat&set /a v=%code2:~,1%-m
  35. cls&echo.&echo          已抽取%code1:~,1%等奖%m%名,还剩余%v%名
  36. echo.&echo       名单正在滚动中...
  37. echo.&echo       请按任意键抽取%code1:~,1%等奖&pause>nul
  38. for /f "tokens=2 delims= " %%i in ('tasklist^|findstr "cmd.exe"') do (
  39.     if "%%i" neq "%pid%" taskkill /pid %%i /f>nul 2>nul
  40. )
  41. :loop
  42. set /a a=%random%%%%total%+1,n=0
  43. for /f "delims=" %%i in (num.txt) do (
  44.     set /a n+=1
  45.     if !n! equ %a% (
  46.        findstr "%%i" name.txt>nul&&goto loop||set "str=%%i"
  47.     )
  48. )
  49. cls&echo.&echo.&echo       本次抽取的%code1:~,1%等奖获得者是:%str%
  50. echo %code1:~,1%等奖:%str%>>name.txt
  51. set var=%var% %str%&set /a m+=1
  52. ping /n 2 127.1>nul
  53. if %m% neq %code2:~,1% goto again
  54. cls&echo.&echo.&echo       %code1:~,1%等奖获得者:
  55. echo.&echo       %var:~1%
  56. echo.&echo       所有%code1:~,1%等奖已抽取完毕,按键继续
  57. pause>nul
  58. set "code1=%code1:~1%"&set "code2=%code2:~1%"   
  59. if defined code1 set "m=0"&set "var="&goto again
  60. echo.&echo       所有奖项已抽取完毕,请按任意键退出
  61. pause>nul
  62. start name.txt
复制代码
lp.bat(副程序)
  1. @echo off&mode con cols=50 lines=5&color 1c
  2. title ***抽 奖 滚 动 窗 口***
  3. :lp
  4. for /f "delims=" %%a in (num.txt) do (
  5.     echo                    %%a
  6.     for /l %%i in (1,1,100) do echo>nul
  7. )
  8. goto lp
复制代码

[ 本帖最后由 batman 于 2008-9-2 22:11 编辑 ]
作者: youxi01    时间: 2008-9-2 23:59

愣是不会用,惭愧ing
作者: batman    时间: 2008-9-3 08:04

原帖由 youxi01 于 2008-9-2 23:59 发表
愣是不会用,惭愧ing

已再次转为exe文件。
作者: liutian523    时间: 2008-9-7 23:53     标题: 支持一下

路过,看看你写的P
作者: rubin    时间: 2008-9-13 00:32

强啊 哈哈
顶顶顶
作者: SmallK    时间: 2008-9-13 01:12

楼主你怎么两个附件啊?而且大小一样……
作者: 523066680    时间: 2009-5-16 15:49

也许是更新 或者是细节上不一样吧
作者: laywhx    时间: 2009-5-18 10:35

怎么不能提取中奖名单啊? 一点就退出了.
作者: yang23    时间: 2009-5-18 10:46

牛人啊啊啊啊啊
作者: zyswht    时间: 2009-6-18 23:52     标题:

那个副程序怎么一直动呀 不会要用手动去停吧。。如果这样要怎么改呢
作者: a690984119    时间: 2009-6-21 11:02     标题: 源码

@echo off&setlocal enabledelayedexpansion
mode con cols=50 lines=10&color 1f
title 幸运抽奖软件 made by batman
for /f "delims=" %%i in (num.txt) do set /a total+=1
set "m=0"&echo 中奖名单:>name.txt
:begin
for /f "tokens=2 delims= " %%i in ('tasklist^|findstr "cmd.exe"') do set "pid=%%i"&goto  next
:next
cls&echo.&echo          ========^> 幸运抽奖 ^<========
echo.&echo       总共有%total%人参与抽奖
echo.&set /p num=      请输入奖项数量(1-10):
echo %num%|findstr "[^0-9]">nul&&goto next
if %num% geq 1 if %num% leq 10 goto contin
goto next
:contin
set "codes=一二三四五六七八九十"
set "code=!codes:~,%num%!"&set "n=1"
:lp
set "a%n%=%code:~,1%"
cls&echo.&echo.&echo.
set /p num%n%=      请输入!a%n%!等奖要抽取的人数:
echo !num%n%!|findstr "[^0-9]">nul&&goto lp
set /a totals+=num%n%
if %totals% geq %total% goto lp
set "code=%code:~1%"&set /a n+=1
if defined code goto lp
cls&set /a n-=1
for /l %%i in (1,1,%n%) do (
    echo.&echo          设定!a%%i!等奖!num%%i!名
    set "code1=!a%%i!!code1!"&set "code2=!num%%i!!code2!"
)
echo.&echo          请按任意键开始抽奖&pause>nul
:again
start lp.exe&set /a v=%code2:~,1%-m
cls&echo.&echo          已抽取%code1:~,1%等奖%m%名,还剩余%v%名
echo.&echo       名单正在滚动中...
echo.&echo       请按任意键抽取%code1:~,1%等奖&pause>nul
for /f "tokens=2 delims= " %%i in ('tasklist^|findstr "cmd.exe"') do (
    if "%%i" neq "%pid%" taskkill /pid %%i /f>nul 2>nul
)
:loop
set /a a=%random%%%%total%+1,n=0
for /f "delims=" %%i in (num.txt) do (
    set /a n+=1
    if !n! equ %a% (
       findstr "%%i" name.txt>nul&&goto loop||set "str=%%i"
    )
)
cls&echo.&echo.&echo.&echo       本次抽取的%code1:~,1%等奖获得者是:%str%
echo %code1:~,1%等奖:%str%>>name.txt
set var=%var% %str%&set /a m+=1
ping /n 2 127.1>nul
if %m% neq %code2:~,1% goto again
cls&echo.&echo.&echo       %code1:~,1%等奖获得者:
echo.&echo       %var:~1%
echo.&echo       所有%code1:~,1%等奖已抽取完毕,按键继续
pause>nul
set "code1=%code1:~1%"&set "code2=%code2:~1%"   
if defined code1 set "m=0"&set "var="&goto again
echo.&echo       所有奖项已抽取完毕,请按任意键退出
pause>nul
start name.txt
@echo off&setlocal enabledelayedexpansion
mode con cols=50 lines=10&color 1f
title 幸运抽奖软件 made by batman
for /f "delims=" %%i in (num.txt) do set /a total+=1
set "m=0"&echo 中奖名单:>name.txt
:begin
for /f "tokens=2 delims= " %%i in ('tasklist^|findstr "cmd.exe"') do set "pid=%%i"&goto  next
:next
cls&echo.&echo          ========^> 幸运抽奖 ^<========
echo.&echo       总共有%total%人参与抽奖
echo.&set /p num=      请输入奖项数量(1-10):
echo %num%|findstr "[^0-9]">nul&&goto next
if %num% geq 1 if %num% leq 10 goto contin
goto next
:contin
set "codes=一二三四五六七八九十"
set "code=!codes:~,%num%!"&set "n=1"
:lp
set "a%n%=%code:~,1%"
cls&echo.&echo.&echo.
set /p num%n%=      请输入!a%n%!等奖要抽取的人数:
echo !num%n%!|findstr "[^0-9]">nul&&goto lp
set /a totals+=num%n%
if %totals% geq %total% goto lp
set "code=%code:~1%"&set /a n+=1
if defined code goto lp
cls&set /a n-=1
for /l %%i in (1,1,%n%) do (
    echo.&echo          设定!a%%i!等奖!num%%i!名
    set "code1=!a%%i!!code1!"&set "code2=!num%%i!!code2!"
)
echo.&echo          请按任意键开始抽奖&pause>nul
:again
start lp.exe&set /a v=%code2:~,1%-m
cls&echo.&echo          已抽取%code1:~,1%等奖%m%名,还剩余%v%名
echo.&echo       名单正在滚动中...
echo.&echo       请按任意键抽取%code1:~,1%等奖&pause>nul
for /f "tokens=2 delims= " %%i in ('tasklist^|findstr "cmd.exe"') do (
    if "%%i" neq "%pid%" taskkill /pid %%i /f>nul 2>nul
)
:loop
set /a a=%random%%%%total%+1,n=0
for /f "delims=" %%i in (num.txt) do (
    set /a n+=1
    if !n! equ %a% (
       findstr "%%i" name.txt>nul&&goto loop||set "str=%%i"
    )
)
cls&echo.&echo.&echo.&echo       本次抽取的%code1:~,1%等奖获得者是:%str%
echo %code1:~,1%等奖:%str%>>name.txt
set var=%var% %str%&set /a m+=1
ping /n 2 127.1>nul
if %m% neq %code2:~,1% goto again
cls&echo.&echo.&echo       %code1:~,1%等奖获得者:
echo.&echo       %var:~1%
echo.&echo       所有%code1:~,1%等奖已抽取完毕,按键继续
pause>nul
set "code1=%code1:~1%"&set "code2=%code2:~1%"   
if defined code1 set "m=0"&set "var="&goto again
echo.&echo       所有奖项已抽取完毕,请按任意键退出
pause>nul
start name.txt

作者: keen    时间: 2009-6-21 12:21     标题: 回复 16楼 的帖子

不知道你想表达什么,如果仅仅是为了贴出源码,人家前面已经贴过了。
如果是为了修改其中的代码,请明示修改后的。
还有,代码超过一行时,请用CODE将代码括起来,以便他人复制。
Q:如何用code将代码括起来?
A:http://bbs.bathome.net/viewthread.php?tid=404&highlight=code
作者: wzahj    时间: 2009-12-4 15:50

支持牛人了啊啊啊啊  呵呵




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2