Board logo

标题: [其他] 批处理点名器为何只能点31个人?求帮助 [打印本页]

作者: 1035390697    时间: 2018-12-6 12:27     标题: 批处理点名器为何只能点31个人?求帮助

一个点名器,但是只能点31个人,不知道怎么办
求大佬们指导一下,修改一下最好了
救救孩子!

我把代码放下面
  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
复制代码

作者: Batcher    时间: 2018-12-6 14:49

http://bbs.bathome.net/thread-12500-1-1.html
http://bbs.bathome.net/thread-5548-1-1.html
阅读一下这两篇文章
作者: Batcher    时间: 2018-12-6 14:50

如果觉得超过31列不好处理,建议修改一下代码逻辑:
请将名单写在同目录下 名单.txt,每个名字一行




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