中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]逐行逐字阅读文本的批处理,请高手帮忙完善
« [1] [2] [3] »
作者:
标题: [已结]逐行逐字阅读文本的批处理,请高手帮忙完善 上一主题 | 下一主题
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 16 楼』:  



  Quote:
Originally posted by chainliq at 2006-11-19 19:07:
呵呵,我倒是觉得这个挺有意思的,请问如何修个它的显示速度呢?


  修改它的显示速度可以更改代码中的 ping 语句,可以增加参数-n的值,也可以增加超时参数-w的值,个人而定。


2007-1-19 05:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
liuxin31554155
新手上路





积分 14
发帖 7
注册 2007-1-19
状态 离线
『第 17 楼』:  

好东西 下来测试下

2007-1-19 06:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 18 楼』:  

  lxmxn『第 6 楼』的代码挺不错的,但是有以下缺憾:
  1、因为启用了变量延迟功能,所以,会把文本中的感叹号置换为空;
  2、因为普通for语句忽略以分号打头的行,所以此代码将不能提取这些行的内容;
  3、if 语句中的 :end 并不能被其他语句作为标签来调用,也就是说,其他语句中的goto end部分执行的时候会出错,并不能跳转到这里;
  4、SET A="%1" 中的引号是多余的,因为在call的时候,%1已经被强行赋予了引号,因此会导致 if "%A%"=="" goto end 一句始终得不到执行;

  在这个代码的基础上,得到如下代码:

  版本一:
@echo off
:: 把半角双引号换成空格,把等号换成〓,兼容其他特殊字符
:: 能处理以分号打头的行,但是会忽略空行
:: 能兼容unicode格式的文本
:: 每行之间空一行显示
for /f "delims= eol=" %%i in ('type %1') do (
    set "str=%%i"
    call set "str=%%str:"= %%"
    call :pickup
)
pause
goto :eof

:pickup
ping -n 1 127.1>nul
if "%str:~0,1%"=="=" set "str=〓%str:~1%"
set /p "=%str:~0,1%"<nul
set "str=%str:~1%"
if defined str goto pickup
echo.&echo.
goto :eof
  版本二:
@echo off
:: 与版本一的几点区别:
::   1、不能处理unicode文本
::   2、每行之间不再强行加上空行,并且能原样显示空行
for /f "delims= eol=" %%i in ('findstr /n .* %1') do (
    set "str=%%i"
    call set "str=%%str:"= %%"
    call set "str=%%str:*:=%%"
    call :pickup
)
echo.
pause
goto :eof

:pickup
if not defined str echo.&goto :eof
if "%str:~0,1%"=="=" set "str=〓%str:~1%"
set /p "=%str:~0,1%"<nul
ping -n 1 127.1>nul
set "str=%str:~1%"
if defined str goto pickup
echo.
goto :eof
[ Last edited by namejm on 2007-2-2 at 02:06 PM ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-2-3 00:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
anqing
高级用户




积分 859
发帖 413
注册 2006-8-14
状态 离线
『第 19 楼』:  

太精彩了,lx和jm全是高人

2007-2-3 00:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flandy
初级用户




积分 94
发帖 40
注册 2007-4-28
状态 离线
『第 20 楼』:  

顶,支持

2007-5-1 23:06
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 21 楼』:  

  根据 [讨论]最大限度原样输出含特殊字符的指定行内容 这个帖子的讨论成果,得到如下代码,能完美解决特殊字符的原样显示问题,发出来大家测试一下:
@echo off

:: 逐行逐字阅读文本,并且原样显示文本内容
:: ① 为了显示文本的所有内容,使用了for+findstr的句式
:: ② 为了能原样显示文本,使用变量延迟并在合适的位置终止延迟
:: ③ 为了能正确显示引号和等号,在语句 set /p= !str:~0,1!<nul 中,等号后空一格,并使用退格键

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




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2007-5-30 11:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qq43142691
中级用户





积分 327
发帖 152
注册 2007-5-4
状态 离线
『第 22 楼』:  

呵呵...个个都是牛人来D....偶也要努力学习ing

2007-5-30 18:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 23 楼』:  

退格键要怎么输入,谁能告诉我啊,谢谢!

2008-1-7 15:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
newaifi
初级用户





积分 154
发帖 67
注册 2006-10-31
状态 离线
『第 24 楼』:  

收藏了。。果然经典

2008-1-8 13:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kaikai163
初级用户





积分 107
发帖 60
注册 2007-11-7
状态 离线
『第 25 楼』:  

听了版主的提示,直接到21楼,测试,牛人一个!

2008-1-8 14:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyfox1047
新手上路





积分 13
发帖 7
注册 2007-10-4
状态 离线
『第 26 楼』:  

都是高手呀!帮顶一个!

2008-1-30 20:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yuehong
初级用户





积分 64
发帖 37
注册 2007-3-14
状态 离线
『第 27 楼』:  

都是高手呀!学习下。。。

2008-3-5 17:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bbcn
新手上路





积分 4
发帖 2
注册 2008-3-5
状态 离线
『第 28 楼』:  

还真是不错啊!

2008-3-5 23:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yk520
初级用户





积分 24
发帖 17
注册 2008-3-20
状态 离线
『第 29 楼』:  

可以啊

2008-3-20 22:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
AhKang
初级用户





积分 42
发帖 21
注册 2008-3-31
状态 离线
『第 30 楼』:  

高人,我等佩服得五体投地。收藏了……

2008-3-31 07:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: