Board logo

标题: [文本处理] 【已解决】求大佬写一个随机输出指定txt文本行的bat [打印本页]

作者: kokoxx    时间: 2024-1-17 13:11     标题: 【已解决】求大佬写一个随机输出指定txt文本行的bat

本帖最后由 kokoxx 于 2024-1-21 11:28 编辑

RT,这个bat会调用指定的txt(文件名和地址由用户直接在bat里通过路径指定,如果不写完整路径,就是bat同文件夹下的指定名称txt)

在这个txt里有很多文本行,用空行间隔

bat就是使用choice命令间隔3秒,随机输出txt里面的一个文本行(跳过txt里的空行)显示在bat的运行窗口,并且对应的文本行是绿色,字体在默认字体的基础上加大(字体加大的功能如果不能在bat里实现就算了)

然后bat输出过程中用户如果按下回车/空格键,则BAT的输出暂定,再按回车/空格键位就继续

对了,考虑到中文显示,所以bat和被操作的txt都不限定编码(至少要支持gb10830 gbk ansi和utf8)

先谢谢大佬了

测试样本
https://www.123pan.com/s/pbxrVv-v79Y.html
作者: ShowCode    时间: 2024-1-20 13:33

第1步.bat
  1. @echo off
  2. chcp 65001 >nul
  3. :GetInput
  4. set /p "InFile=请输入文件:"
  5. if not exist "%InFile%" (
  6.     echo 文件不存在
  7.     goto :GetInput
  8. )
  9. for /f "delims=" %%i in ('type "%InFile%"') do (
  10.     echo,%%i
  11.     timeout /t 3 >nul
  12. )
复制代码

作者: kokoxx    时间: 2024-1-20 14:19

回复 2# ShowCode


    大佬,测试代码可用,就是能不能给输出字体加上颜色和字体变化?
作者: ShowCode    时间: 2024-1-20 18:01

回复 3# kokoxx


第2步.bat
  1. @echo off
  2. chcp 65001 >nul
  3. for /f %%i in ('echo prompt $E ^| cmd') do (
  4.     set "KeyESC=%%i"
  5. )
  6. :GetInput
  7. set /p "InFile=请输入文件:"
  8. if not exist "%InFile%" (
  9.     echo 文件不存在
  10.     goto :GetInput
  11. )
  12. for /f "delims=" %%i in ('type "%InFile%"') do (
  13.     echo %KeyESC%[38;2;0;255;0m%%i
  14.     timeout /t 3 >nul
  15. )
复制代码

作者: kokoxx    时间: 2024-1-20 18:50

本帖最后由 kokoxx 于 2024-1-20 19:23 编辑

测试后,很好用,谢谢
作者: kokoxx    时间: 2024-1-20 20:00

回复 4# ShowCode


    大佬,刚发现一个问题,那就是你的bat脚本输出文本是按顺序从上到下而不是随机输出……
作者: ShowCode    时间: 2024-1-21 10:33

回复 6# kokoxx


第3步.bat
  1. @echo off
  2. chcp 65001 >nul
  3. setlocal enabledelayedexpansion
  4. for /f %%i in ('echo prompt $E ^| cmd') do (
  5.     set "KeyESC=%%i"
  6. )
  7. :GetInput
  8. set /p "InFile=请输入文件:"
  9. if not exist "%InFile%" (
  10.     echo 文件不存在
  11.     goto :GetInput
  12. )
  13. :StoreRand
  14. for /f "delims=" %%i in ('type "%InFile%"') do (
  15.     set "_!random!=%%i"
  16. )
  17. :ShowRand
  18. for /f "tokens=1* delims==" %%a in ('set _') do (
  19.     echo %KeyESC%[38;2;0;255;0m%%b
  20.     timeout /t 3 >nul
  21. )
  22. endlocal
复制代码

作者: kokoxx    时间: 2024-1-21 11:28

回复 7# ShowCode

多谢大佬出手!
作者: czjt1234    时间: 2024-1-21 12:07

厉害厉害,完全看不懂




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