Board logo

标题: [特效代码] 文字延时逐字显示 [打印本页]

作者: AK47    时间: 2008-9-21 23:22     标题: 文字延时逐字显示

“我不想让你哭,也不想认输,只想用我的爱再次把你留住”,能不能用批处理把这些文字一个一个按顺序显示出来,时差最好是0.5秒?
作者: pusofalse    时间: 2008-9-21 23:31

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "str=我不想让你哭,也不想认输,只想用我的爱再次把你留住。"
  4. for /l %%a in (0 1 100) do (
  5.      if "!str:~%%a,1!" neq "" (
  6.          set/p=!str:~%%a,1!<nul
  7.          sleepx -m 500
  8.          ) else (
  9.          pause>nul&exit/b
  10. ))
复制代码

作者: AK47    时间: 2008-9-21 23:48

我把代码直接复制后,运行后不行!
作者: AK47    时间: 2008-9-22 00:08

我刚才在新手区看到的,代码这样就可以了,还是谢谢你了!


@echo off&setlocal enabledelayedexpansion
set "str=我不想让你哭,也不想认输,只想用我的爱再次把你留住"
for /l %%a in (0 1 50) do (
      if "!str:~%%a,1!" neq "" (
          set/p=!str:~%%a,1!<nul
          for /l %%i in (1 1 400) do echo.>nul
         ) else (
         pause>nul&exit/b
     )
)
作者: pusofalse    时间: 2008-9-22 00:37

for /l %%i in (1 1 400) do echo.>nul
这样虽能起到延时的作用,但不能精确到0.5s。
第一段代码是需要借助第三方工具的,sleepx.exe
延时精确。
作者: AK47    时间: 2008-9-22 00:45

其实也不用说精确到0.5秒,有廷时的效果就可以了!谢谢了!
作者: Batcher    时间: 2008-9-22 10:28     标题: 回复 3楼 的帖子

如果代码里面格式化之类的代码,你也复制以后直接运行吗^_^
作者: batman    时间: 2008-9-22 19:13

不知楼上是不理解怎么延时还是不理解整个代码,如果要对整个代码都进行说明,不是要把整
个相关的dos命令都详细说明一下,所以请大家以后发问时最好能截取要说明的部分,不然是没
人会有来回答这样的问题的。
作者: lixiaodaoaaa    时间: 2008-9-23 14:22     标题: 不错,但是我不太懂。。

原帖由 AK47 于 2008-9-22 00:08 发表
我刚才在新手区看到的,代码这样就可以了,还是谢谢你了!


@echo off&setlocal enabledelayedexpansion
set "str=我不想让你哭,也不想认输,只想用我的爱再次把你留住"
for /l %%a in (0 1 50) do (
       ...


代码不错,呵呵,请楼主抽个时间,详细分析一下代码,我想大家都会很感谢你的
我是看的不太懂。。。
作者: AK47    时间: 2008-9-23 17:30

呵呵,不好意思,我也是刚学批处理的菜鸟!这段代码我也是不怎么懂!
作者: batman    时间: 2008-9-23 19:27

我来一个,顺便解释下:
  1. @echo off
  2. set "str=我不想让你哭,也不想认输,只想用我的爱再次把你留住。"
  3. :lp
  4. set /p=%str:~,1%<nul&set "str=%str:~1%"
  5. for /l %%i in (1,1,500) do echo>nul
  6. if defined str goto lp
  7. pause>nul
复制代码
代码就是利用的set /p=<nul同行追加输出功能,通过对字符串str的逐字截取并追加输出,同时
使用for循环来实现对字符的延时显示效果。大家注意了这个echo>nul实是一个无效命令,反
正不管你采用什么方法只要能让命令无效同时将信息屏蔽掉,同时用for实现n次无效就能达到延
时的目的了。
作者: pusofalse    时间: 2008-9-23 19:33

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "str=我不想让你哭,也不想认输,只想用我的爱再次把你留住。"
  4. for /l %%a in (0 1 100) do (
  5.      if "!str:~%%a,1!" neq "" (
  6.          set/p=!str:~%%a,1!<nul
  7.          sleepx -m 500
  8.          ) else (
  9.          pause>nul&exit/b
  10. ))
复制代码



for /l %%a in (0 1 100) do if "!str:~%%a,1!" neq "" set/p=!str:~%%a,1!<nul
用for 来控制0-100这些个数,并检测str的值在第几个字符不为空,不为空就打印出来。"!str:~%%a,1!" 在此处会扩展为"!str:~0,1!"  "!str:~1,1!" !str:~2,1!" ....."!str:~10,1!",~之后的“偏移”就是for中控制的数,如果不为空值,接下来就是set/p=!str:~%%a,1!<nul的作用了,输出!str:~%%a,1!但不换行,关于set/p的用法,具体请看http://bbs.bathome.net/thread-1940-1-1.html 5楼。
sleep -m 500,借用第三方工具sleep.exe,延时500毫秒。
以上,都是在!str:~%%a,1!不为空的情况下来的,如果检测到"!Str:~%%a,1!"为空又如何呢,就会执行else 中的语句,pause>nul&exit/b,暂停并退出,只要检测到一次就会退出。
作者: AK47    时间: 2008-9-24 09:51

这三句能不能再解释得清楚一点!
set /p=%str:~,1%<nul&set "str=%str:~1%"
for /l %%i in (1,1,500) do echo>nul
if defined str goto lp
作者: batman    时间: 2008-9-24 10:51

运行以下代码吧:
  1. @echo off
  2. rem str值可自行修改
  3. set "str=123456789"
  4. set "a=%str%"
  5. :lp
  6. set /a n+=1
  7. echo 原始的str为:"123456789",经第%n%次循环并延时后
  8. set "var=%var%%str:~,1%"
  9. set /p=截取的字符为:"%str:~,1%",<nul&set "str=%str:~1%"
  10. set /p=str为:"%str%",<nul
  11. set /p=输出的字符串为:"%var%"。<nul
  12. for /l %%i in (1,1,2000) do echo>nul
  13. if defined str cls&goto lp
  14. pause>nul
复制代码

[ 本帖最后由 batman 于 2008-9-24 11:26 编辑 ]
作者: batman    时间: 2008-9-24 16:05     标题: 再运行以下代码娱乐娱乐:

  1. @echo off&color 1f&mode con lines=4
  2. for /l %%i in (1,1,40) do call,set "kong=%%kong%% "
  3. :begin
  4. set "str=%kong%亲爱的,我不想让你哭,也不想认输,只想用我的爱再次把你留住。"
  5. :lp
  6. echo.&echo.%str:~,40%&set "str=%str:~1%"
  7. for /l %%i in (1,1,1000) do echo>nul
  8. if defined str cls&goto lp
  9. goto begin
复制代码

作者: emou    时间: 2008-9-27 10:15

真是个学习的好地方,谢谢各位!
作者: MF9593    时间: 2020-3-21 22:57

回复 15# batman


    无意间看到这个代码不错,请问能实现一个窗口顶部滚动文字,下面同时显示文字还能正常操作(输入1或者2进行其他命令),不清屏




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