标题: 批处理文本逐字显示支持所有特殊符号 [打印本页]
作者: xxx3212 时间: 2007-12-25 23:09 标题: 批处理文本逐字显示支持所有特殊符号
- @echo off
- for /f "delims=" %%a in (1.txt) do (
- set a=%%a
- set b=0
- call :start
- echo.
- )
- :end
- pause>nul&goto end
- :start
- setlocal enabledelayedexpansion
- if "!a:~%b%,1!"=="" goto :eof
- endlocal
- ping /n 1 127.1 >nul
- call set/p="←%%a:~%b%,1%%"<nul
- set/a b+=1
- 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窗口中不能原样显示- @echo off
- for /f "delims=" %%i in ('findstr /n .* test.txt') 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
复制代码
[ 本帖最后由 随风 于 2007-12-26 01:37 编辑 ]
作者: xxx3212 时间: 2007-12-26 02:05
我电脑上测试所有符号都通过了
作者: xxx3212 时间: 2007-12-26 02:06
- @echo off
- for /f "delims=" %%a in (1.txt) do (
- set a=%%a
- set b=0
- call :start
- echo.
- )
- :end
- pause>nul&goto end
- :start
- setlocal enabledelayedexpansion
- if "!a:~%b%,1!"=="" goto :eof
- endlocal
- for /l %%b in (1,1,500) do ver>nul
- call set/p="←%%a:~%b%,1%%"<nul
- set/a b+=1
- 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
随风版主的代码不能显示以:两点开头的行
:
我现在重新改了下 能支持所有符号了- @echo off
- for /f "delims= eol=" %%a in (1.txt) do (
- set a=%%a
- setlocal enabledelayedexpansion
- call :start
- endlocal
- )
- pause
- :start
- for /l %%b in (1,1,100) do ver>nul
- if "!a!"=="" echo.&goto :eof
- set/p= !a:~%b%,1!<nul
- set a=!a:~1!
- 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 |