找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25507|回复: 2

[其他] 批处理点名器为何只能点31个人?求帮助

[复制链接]
发表于 2018-12-6 12:27:04 | 显示全部楼层 |阅读模式
一个点名器,但是只能点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
复制代码
发表于 2018-12-6 14:49:22 | 显示全部楼层
发表于 2018-12-6 14:50:02 | 显示全部楼层
如果觉得超过31列不好处理,建议修改一下代码逻辑:
请将名单写在同目录下 名单.txt,每个名字一行
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 20:51 , Processed in 0.027022 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表