找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 79167|回复: 18

[特效代码] 文字延时逐字显示

[复制链接]
发表于 2008-9-21 23:22:37 | 显示全部楼层 |阅读模式
“我不想让你哭,也不想认输,只想用我的爱再次把你留住”,能不能用批处理把这些文字一个一个按顺序显示出来,时差最好是0.5秒?
发表于 2008-9-21 23:31:15 | 显示全部楼层
  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. ))
复制代码
 楼主| 发表于 2008-9-21 23:48:27 | 显示全部楼层
我把代码直接复制后,运行后不行!
 楼主| 发表于 2008-9-22 00:08:04 | 显示全部楼层
我刚才在新手区看到的,代码这样就可以了,还是谢谢你了!


@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
     )
)

评分

参与人数 1PB +1 收起 理由
lixiaodaoaaa + 1 非常不错!如果你能给大家解释一下,我会给 ...

查看全部评分

发表于 2008-9-22 00:37:28 | 显示全部楼层
for /l %%i in (1 1 400) do echo.>nul
这样虽能起到延时的作用,但不能精确到0.5s。
第一段代码是需要借助第三方工具的,sleepx.exe
延时精确。
 楼主| 发表于 2008-9-22 00:45:24 | 显示全部楼层
其实也不用说精确到0.5秒,有廷时的效果就可以了!谢谢了!
发表于 2008-9-22 10:28:34 | 显示全部楼层

回复 3楼 的帖子

如果代码里面格式化之类的代码,你也复制以后直接运行吗^_^
发表于 2008-9-22 19:13:53 | 显示全部楼层
不知楼上是不理解怎么延时还是不理解整个代码,如果要对整个代码都进行说明,不是要把整
个相关的dos命令都详细说明一下,所以请大家以后发问时最好能截取要说明的部分,不然是没
人会有来回答这样的问题的。
发表于 2008-9-23 14:22:45 | 显示全部楼层

不错,但是我不太懂。。

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


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


代码不错,呵呵,请楼主抽个时间,详细分析一下代码,我想大家都会很感谢你的
我是看的不太懂。。。
 楼主| 发表于 2008-9-23 17:30:32 | 显示全部楼层
呵呵,不好意思,我也是刚学批处理的菜鸟!这段代码我也是不怎么懂!
发表于 2008-9-23 19:27:44 | 显示全部楼层
我来一个,顺便解释下:
  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次无效就能达到延
时的目的了。
发表于 2008-9-23 19:33:20 | 显示全部楼层
  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,暂停并退出,只要检测到一次就会退出。
 楼主| 发表于 2008-9-24 09:51:49 | 显示全部楼层
这三句能不能再解释得清楚一点!
set /p=%str:~,1%<nul&set "str=%str:~1%"
for /l %%i in (1,1,500) do echo>nul
if defined str goto lp
发表于 2008-9-24 10:51:29 | 显示全部楼层
运行以下代码吧:

  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 编辑 ]
发表于 2008-9-24 16:05:04 | 显示全部楼层

再运行以下代码娱乐娱乐:

  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 15:54 , Processed in 0.021558 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表