Board logo

标题: 批处理文本逐字显示支持所有特殊符号 [打印本页]

作者: xxx3212    时间: 2007-12-25 23:09     标题: 批处理文本逐字显示支持所有特殊符号

  1. @echo off
  2. for /f "delims=" %%a in (1.txt) do (
  3. set a=%%a
  4. set b=0
  5. call :start
  6. echo.
  7. )
  8. :end
  9. pause>nul&goto end
  10. :start
  11. setlocal enabledelayedexpansion
  12. if "!a:~%b%,1!"=="" goto :eof
  13. endlocal
  14. ping /n 1 127.1 >nul
  15. call set/p="←%%a:~%b%,1%%"<nul
  16. set/a b+=1
  17. goto :start
复制代码


::自己测试了很多次没发现BUG
::如发现BUG请指出来

[ 本帖最后由 foxJL 于 2007-12-25 23:58 编辑 ]
作者: foxJL    时间: 2007-12-26 00:00

测试通过.只是不能处理空行.
帮你把代码用代码框框起来了,以后发代码要记得框起来.
作者: 随风    时间: 2007-12-26 01:20

1. 不能处理分号开头的行,
2. 不能处理空行.
3. 代码还不够简洁.

:: 转摘
::相关代码已经讨论过了,以下代码出至cn-dos联盟,具体作者不记得了,只记得是由namejm整理的.
:: 逐行逐字阅读文本,并且原样显示文本内容
:: ① 为了显示文本的所有内容,使用了for+findstr的句式
:: ② 为了能原样显示文本,使用变量延迟并在合适的位置终止延迟
:: ③ 为了能正确显示引号和等号,在语句 set /p= !str:~0,1!<nul 中,等号后空一格,并使用退格键
:: ④ 因为退格键的特殊作用,在CMD窗口中不能原样显示
  1. @echo off
  2. for /f "delims=" %%i in ('findstr /n .* test.txt') do (
  3.     set "str=%%i"
  4.     setlocal enabledelayedexpansion
  5.     set str=!str:*:=!
  6.     call :pickup
  7.     endlocal
  8. )
  9. pause
  10. goto :eof
  11. :pickup
  12. ping -n 1 127.1>nul
  13. if defined str (
  14.     set /p= !str:~0,1!<nul
  15.     set str=!str:~1!
  16.     goto pickup
  17. )
  18. echo.
  19. goto :eof
复制代码

[ 本帖最后由 随风 于 2007-12-26 01:37 编辑 ]
作者: xxx3212    时间: 2007-12-26 02:05

我电脑上测试所有符号都通过了
作者: xxx3212    时间: 2007-12-26 02:06

  1. @echo off
  2. for /f "delims=" %%a in (1.txt) do (
  3. set a=%%a
  4. set b=0
  5. call :start
  6. echo.
  7. )
  8. :end
  9. pause>nul&goto end
  10. :start
  11. setlocal enabledelayedexpansion
  12. if "!a:~%b%,1!"=="" goto :eof
  13. endlocal
  14. for /l %%b in (1,1,500) do ver>nul
  15. call set/p="←%%a:~%b%,1%%"<nul
  16. set/a b+=1
  17. goto :start
复制代码

作者: xxx3212    时间: 2007-12-26 02:06

仔细试遍 我的电脑都通过了的
作者: xxx3212    时间: 2007-12-26 02:08

郁闷了 两个版主都说没通过 难道我电脑比你们的兼容性好些
作者: youxi01    时间: 2007-12-26 07:45

原帖由 随风 于 2007-12-26 01:20 发表
1. 不能处理分号开头的行,
2. 不能处理空行.
3. 代码还不够简洁.

:: 转摘
::相关代码已经讨论过了,以下代码出至cn-dos联盟,具体作者不记得了,只记得是由namejm整理的.
:: 逐行逐字阅读文本,并且原样显示文本 ...


这个似乎是 namejm 在人家的基础上,掺入了自己的想法,经反复测试得出来的...

就凭 随风 兄对这段代码的理解程度,也足以获得加分奖励!!
作者: novaa    时间: 2007-12-26 13:31

楼主的的确会跳过空行且不能正常显示分号。

顺便说下。随风版主可记得自己写的论坛广告?

[ 本帖最后由 novaa 于 2007-12-26 13:35 编辑 ]
作者: foxJL    时间: 2007-12-26 14:02

原帖由 novaa 于 2007-12-26 13:31 发表
楼主的的确会跳过空行且不能正常显示分号。

顺便说下。随风版主可记得自己写的论坛广告?

是不能显示以分号开头的行,如果分号在中间还是可以显示的.
作者: xxx3212    时间: 2007-12-26 21:21

随风版主的代码不能显示以:两点开头的行
:
我现在重新改了下 能支持所有符号了
  1. @echo off
  2. for /f "delims= eol=" %%a in (1.txt) do (
  3. set a=%%a
  4. setlocal enabledelayedexpansion
  5. call :start
  6. endlocal
  7. )
  8. pause
  9. :start
  10. for /l %%b in (1,1,100) do ver>nul
  11. if "!a!"=="" echo.&goto :eof
  12. set/p= !a:~%b%,1!<nul
  13. set a=!a:~1!
  14. goto :start
复制代码

作者: xxx3212    时间: 2007-12-26 21:23

对不起 搞错了 原来支持
作者: fml520    时间: 2008-3-14 10:24

@echo off
title 文本阅读批处理 BY 批处理之家--随风制作
color 89
set /p p=请把要阅读的文件放到这里来:
cls
for /f "delims=" %%i in ('findstr /n .* %p%') do (
set "str=%%i"
setlocal enabledelayedexpansion
set str=!str:*:=!
call :pickup
endlocal
)
pause
goto :eof
:pickup
ping -n 1 127.1>nul
if defined str (
set /p= !str:~0,1!<NUL
set str=!str:~1!
goto pickup
)
echo.
goto :eof
echo.
echo 阅读完毕,谢谢使用,欢迎进入-批处理之家-http://bbs.bathome.net
echo.
PAUSE
[ 本帖最后由 fmr520 于 2008-3-15 09:24 编辑 ]
作者: fml520    时间: 2008-3-14 10:29

我 做了个 小小的修改。目的是方便大家阅读,其他的我 都 测试了 ,不能这样做,只有这个代码可以,所以就改了下。




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