[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[游戏娱乐] 批处理文本阅读器

在论坛混了这么久,第一次在原创板块发帖,而且代码跟高手们的比起来还真是汗颜,可真是进步缓慢啊。来批处理之家前只是在百度上对一些简单命令有一点点了解,刚进来什么都不懂。在这里我要感谢batman,可以说是他引我入门的,他跟我一样不是学计算机的,但是我很佩服他的技术。那时候天天缠着他问问题,耽误了他不少时间。
之前也写过一些自认为实用性的东西,但是总感觉写的太差劲,不敢贴出来,有时工作忙也没心思去弄。贴这个代码出来主要希望大家指点几个问题:
1.for /f处,我是call调用:loop对每行进行处理,但是这样会发现文章很长时到后面速度会变慢很多。开始我把loop段嵌套到for里面通过goto跳转,但是for处理完一行就会跳出循环。不知道有什么好的解决办法不?
测试代码:
  1. @echo off
  2. for /f "%_skip% delims=" %%i in ('findstr /n ".*" 1.txt') do (
  3.     set "var=%%i"&set/a line+=1
  4.     setlocal enabledelayedexpansion
  5.     title 第!line!段(右击暂停,CTRL+C停止)
  6.     set "var=!var:*:=!"
  7. :loop
  8.     set/a n+=1&set "str1=!str!"
  9.     call,set "str=%%var:~0,!n!%%"
  10.     if "!str!" equ "!str1!" goto next
  11.     set/p=!str!<nul
  12.     if !n! equ 25 set/a n=0&set "var=!var:~25!"&echo\&echo\
  13.     if not defined var goto next
  14.     for /l %%a in (1,1,50) do set/p=<nul
  15.     for /l %%b in (1,1,100) do ver>nul
  16.     goto loop
  17. :next
  18.     echo\&echo\&endlocal
  19. )
  20. pause
复制代码
2.还存在部分特殊字符的组合不能正确显示
3.我想产生一个ini配置文件,规定一个格式来将文件添加到列表,记录历史记录(阅读到的行数、速度、位置等信息),方案想到了,但是会对配置文件反复进行写入操作(每行一次),不知会不会硬盘损耗厉害。
下面是我的代码:
  1. @echo off
  2. title 文本阅读器(右击暂停,CTRL+C停止)
  3. color 1f&mode con cols=50 lines=30
  4. echo.&echo.&echo.&echo.
  5. set/p file= 请把要阅读的文本拖入窗口:
  6. echo.&set/p m= 开始阅读位置*段(直接回车默认从头开始):
  7. if defined m (set/a m-=1&call,set "_skip=skip=%%m%%")
  8. echo.&set/p speed= 速度(直接回车默认速度为100;数值越小速度越快):
  9. if not defined speed set speed=100
  10. cls&set "line=%m%"
  11. for /f "%_skip% delims=" %%i in ('findstr /n ".*" %file%') do (
  12.     set "var=%%i"&set/a line+=1
  13.     setlocal enabledelayedexpansion
  14.     title 第!line!段(右击暂停,CTRL+C停止)
  15.     set "var=!var:*:=!"
  16.     if defined var call :loop
  17.     echo\&echo\&endlocal
  18. )
  19. echo\&echo               本文完!!!
  20. ping /n 3 127.1 >nul
  21. exit
  22. :loop
  23. set/a n+=1&set "str1=!str!"
  24. call,set "str=%%var:~0,!n!%%"
  25. if "!str!" equ "!str1!" goto :eof
  26. set/p=!str!<nul
  27. if !n! equ 25 set/a n=0&set "var=!var:~25!"&echo\&echo\
  28. if not defined var goto :eof
  29. for /l %%a in (1,1,50) do set/p=<nul
  30. for /l %%b in (1,1,%speed%) do ver>nul
  31. goto loop
复制代码
2

评分人数

    • batman: 兄弟,继续加油了PB + 8
    • 随风: 加分鼓励!PB + 8

batman后面输出部分我以前也常用,到这里我怎么使用这个笨办法了,看来是钻进死胡同不知变通了。
我那样效率确实低了很多,还要考虑每行字符数。

TOP

set /p= !str:~0,1!<nul
前面留个空格又给退回去,这不多此一举吗,难道有什么特殊用途?
set /p=!str:~0,1!<nul,直接这样没发现什么不可以啊。。。

TOP

回复 6楼 的帖子

谢谢,我拿那个特殊符号集测试了下,没有空格加退格键会出错。

TOP

返回列表