Board logo

标题: [文本处理] [已解决]批处理如何实现文本逐字原样输出? [打印本页]

作者: wgoxm521    时间: 2010-1-19 22:04     标题: [已解决]批处理如何实现文本逐字原样输出?

今天听歌后来兴趣了,想逐字显示歌词,但是还是玩出来毛病了。各位,该出手了,看我哪里错了,错了多少,别留着您的良言。文件代码:b.txt:
                车继玲 最远的你是我最近的爱#
       夜以沉默 心事向谁说#
        不肯回头 所有的爱多错过#
        别笑我懦弱#
        我始终不能猜透#
        为何人生淡漠#
        风雨之后 无所谓拥有#
         萍水相逢 你却给我那么多#
        你挡住寒冬 温暖只保留给我#
        风霜寂寞 凋落在你的怀中#
        人生风景在游走#
       每当孤独我回首#
        你的爱总在不远的地方等着我#下面是代码:
  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "delims=," %%i in (b.txt) do (
  3.         set /a "num+=1"
  4.         set "wind!num!=%%i"
  5.         rem 把文本的值赋给wind!num!
  6.         )for /l %%j in (1,1,!num!) do (
  7.         rem 把每一行的值都赋给a
  8.         set "a=!wind%%j!" && for /l %%k in (1,1,15) do (
  9.         rem 开始逐字显示
  10.         set "b=!a:~%%k,1!"
  11.         set/p=!a:~%%k,1!nul
  12.         )
  13. )echo/pause>nul
复制代码
我这先谢谢各位了。^__^
答案:5楼正解

[ 本帖最后由 wgoxm521 于 2010-2-7 11:47 编辑 ]
作者: Batcher    时间: 2010-1-19 22:13

参考:批处理最大限度原样输出含特殊字符的指定行内容
http://www.bathome.net/thread-4580-1-1.html
作者: wgoxm521    时间: 2010-1-19 22:15     标题: 谢谢

Batcher 真是负责,太感动了。才发了几分钟的贴,就回复了。
^_^
作者: keen    时间: 2010-1-19 22:53

  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "delims=," %%i in (b.txt) do (
  3.         set /a "num+=1"
  4.         set "wind!num!=%%i"
  5.         rem 把文本的值赋给wind!num!
  6.         )
  7. for /l %%j in (1,1,!num!) do (
  8.         rem 把每一行的值都赋给a
  9.         set "a=!wind%%j!" && for /l %%k in (0,1,15) do (
  10.         rem 开始逐字显示
  11.     set "b=!a:~%%k,1!"
  12.         set/p=!a:~%%k,1!<nul
  13.         if "!b!" equ "#" echo.
  14.         rem 换行
  15.         ping -n 1 127.1>nul
  16.         )
  17. )
  18. echo/
  19. pause>nul
复制代码

作者: keen    时间: 2010-1-20 10:25

  1. @echo off & setlocal EnableDelayedExpansion
  2. for /f "delims=," %%i in (b.txt) do (
  3.     set /a "num+=1"
  4.     set "wind!num!=%%i"
  5.     rem 把文本的值赋给wind!num!
  6. )
  7. for /l %%j in (1,1,!num!) do (
  8.     rem 把每一行的值都赋给a
  9.     set "a=!wind%%j!"
  10.     for /l %%k in (0,1,15) do (
  11.         rem 开始逐字显示
  12.     set "b=!a:~%%k,1!"
  13.         if "!b!" equ "#" (echo/) else set/p=!b!<nul
  14.         rem 换行
  15.     ping -n 1 -w 1 127.1>nul
  16.     )
  17. )
  18. pause>nul
复制代码
以后描述问题一次性描述清楚,不要跟帖补充问题。

为了节省论坛空间,还是把图片删除了吧。你用语言可以描述清楚的。
作者: wgoxm521    时间: 2010-1-20 12:22     标题: 回复 5楼 的帖子

哦。谢谢。
我知道了,以后会注意的。

[ 本帖最后由 wgoxm521 于 2010-1-21 18:22 编辑 ]
作者: batman    时间: 2010-1-20 17:53

跟风,原来写的:
  1. @echo off&color 1f&mode con lines=5
  2. if defined flag goto next
  3. set "flag=a"
  4. start /b %~nx0
  5. title 按任意键退出
  6. set "str=只是为何当初你是不听所有纷纷扰扰满天流言漫天风雨你会选择了我?只是为何如今我们不顾一切追求真爱坚持到底苦尽甘来你会放弃了我?再说你也不会懂,心再痛你能做什么,只有把自己深锁,错了又错。。。"
  7. for /l %%i in (1,1,40) do call,set "kong=%%kong%% "
  8. :again
  9. set "a=%kong%%str%"
  10. :lp
  11. cls&echo.&echo.
  12. set /p=%a:~,40%<nul&set "a=%a:~1%"
  13. for /l %%i in (1,1,1000) do echo>nul
  14. if defined a goto lp
  15. goto again
  16. :next
  17. pause>nul
  18. taskkill /f /fi "windowtitle eq 按任意键退出*" /im "cmd.exe">nul 2>nul
  19. exit
复制代码

作者: zqz0012005    时间: 2010-1-20 18:36

在屏幕上显示时,最好用(空格后面加退格符)
set /p= !b!<nul
可以兼容等号和引号

如果要输出到文件,且要兼容特殊字符,则应该考虑用vbs
作者: wgoxm521    时间: 2010-1-22 12:32     标题: 感谢8楼指点

呵呵,谢谢楼主指点,感动中....
作者: wgoxm521    时间: 2010-10-31 02:58     标题: 标题:此双线程批处理,怎么实现按任意退出

原帖由 batman 于 2010-1-20 17:53 发表
跟风,原来写的:@echo off&color 1f&mode con lines=5
if defined flag goto next
set "flag=a"
start /b %~nx0
title 按任意键退出
set "str=只是为何当初你是不听所有纷纷扰扰满天流言漫天风雨你会选择了我? ...

曾在QQ请教于Batman,可能因为batman太忙,没注意到。




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