Board logo

标题: [文本处理] 批处理点名软件 [打印本页]

作者: 543625691    时间: 2014-7-25 13:47     标题: 批处理点名软件

我做了一个点名bat,内容如下:
  1. @echo off
  2. title 点名软件
  3. echo 请将名单写在同目录下 名单.txt,写在一行,用中文逗号(,)隔开,如:
  4. echo 小张,小王,小李,小刘
  5. pause
  6. set a=1
  7. :0
  8. for /f "delims=, tokens=%a%" %%i in (名单.txt) do (set /a a=%a%+1&goto 0)
  9. set  /a a=%a%-1
  10. :1
  11. set /a b=%random%%%%a%+1
  12. for /f "delims=, tokens=%b%" %%i in (名单.txt) do echo %%i&pause&cls
  13. goto 1
复制代码
解释一下,:0以上是提示,:0到:1是检测有多少人,:1后就是点名。希望:0到:1能简化,好像太麻烦了,虽然速度没影响。
作者: 543625691    时间: 2014-8-30 21:58

怎么一个月都没人???!!!!!!
作者: Tamce    时间: 2014-8-31 01:07

建议可以用find还是findstr(不记得了)
详情请看find /?,findstr /?
查找逗号个数即可
作者: yu2n    时间: 2014-9-2 00:13

回复 2# 543625691
你这里漏洞太多,不单单是帮你修改程序这么简单了。
首先,你的思维逻辑要正确,这个别人帮不了你。
  1. :1
  2. set /a b=%random%%%%a%+1
  3. for /f "delims=, tokens=%b%" %%i in (名单.txt) do echo %%i&pause&cls
  4. goto 1
复制代码
1. 这里是个死循环,也就是你会点N个学生的名,并且一直点下去。
2. %random% 会产生重复的随机数,也就是说,你可能会重复点某人多次。

修改后:
  1. @echo off
  2. title 点名软件
  3. echo 请将名单写在同目录下 名单.txt,写在一行,用中文逗号(,)隔开,如:
  4. echo 小张,小王,小李,小刘
  5. if not exist "名单.txt"  echo 小张,小王,小李,小刘>名单.txt
  6. if exist "已点名单.txt"  del /q /f  "已点名单.txt"
  7. pause
  8. cls
  9. set a=1
  10. :0
  11. for /f "delims=, tokens=%a%" %%i in (名单.txt) do (set /a a=%a%+1&goto 0)
  12. set  /a a=%a%-1
  13. :1
  14. set /a b=%random%%%%a%+1
  15. if exist  "已点名单.txt" (
  16.     for /f "delims=, tokens=%b%" %%i in (名单.txt) do (
  17.         type "已点名单.txt" |find /i "%%i" >nul 2>nul && goto :1
  18.     )
  19. )
  20. set  /a c=%c%+1
  21. for /f "delims=, tokens=%b%" %%i in (名单.txt) do (
  22.     echo %%i >>"已点名单.txt"
  23.     echo [%c%/%a%]%%i
  24.     pause
  25.     cls
  26. )
  27. if %c% geq %a% (
  28.     echo 点名结束!
  29.     if exist "已点名单.txt"  del /q /f  "已点名单.txt"
  30.     pause
  31.     goto :eof
  32. )
  33. goto 1
复制代码

作者: yu2n    时间: 2014-9-8 02:55

再来一个版本~
  1. @echo off
  2. title 点名软件
  3. echo 请将名单写在同目录下 名单.txt,写在一行,用中文逗号(,)隔开,如:
  4. echo 小张,小王,小李,小刘
  5. if not exist "名单.txt"  echo 小张,小王,小李,小刘>名单.txt
  6. pause
  7. cls
  8. REM 启用延迟环境变量扩展
  9. setlocal enabledelayedexpansion
  10. :: 统计个数
  11. call :_get_count
  12. :: 生成随机变量 $n$
  13. for /l %%i in (1,1,%nCount%) do (
  14.   call :_rnd %%i
  15. )
  16. :: 随机点名,每个人只点一次
  17. echo 点名开始!
  18. for /l %%i in (1,1,%nCount%) do (
  19.   REM 从随机变量中读取值
  20.   for /f "delims=??" %%j in ('echo,!$%%i$!') do (set/p p=!$%%i$![%%i/%nCount%].  !#%%j#!  <nul)
  21.   pause
  22. )
  23. echo 点名结束!
  24. pause
  25. goto :eof
  26. :: 统计个数,生成升序变量 #n#
  27. goto :eof
  28. :_get_count
  29. set/a nCount=1
  30. :_count
  31.   for /f "delims=, tokens=%nCount%" %%i in (名单.txt) do (
  32.     set/a nCount=%nCount% + 1
  33.     REM add env $$
  34.     set "#%nCount%#=%%~i"
  35.     echo %nCount%. %%~i
  36.     goto :_count
  37.   )
  38.   set/a nCount=%nCount% - 1
  39.   goto :eof
  40.   
  41. :: 生成随机变量 $n$
  42. goto :eof
  43. :_rnd
  44.   set/a min=1
  45.   set/a max=%nCount%
  46.   set/a num=(%random%) %% (%max% - %min% + 1) + %min%
  47.   if defined $%num%$ goto :_rnd
  48.   REM add env ##
  49.   set $%num%$=%1
  50.   goto :eof
复制代码





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