Board logo

标题: [特效代码] 批处理实现将一行字符串从首尾两端同时逐渐显示 [打印本页]

作者: 随风    时间: 2007-12-29 22:54     标题: 批处理实现将一行字符串从首尾两端同时逐渐显示

本帖最后由 pcl_test 于 2017-3-31 16:37 编辑

从两头显示,novaa 说的可是这个意识?
:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set var=欢迎光临批处理之家
  4. for /l %%a in (1 1 80) do set t=!t!
  5. for /l %%a in (1 1 36) do set ko= !ko!
  6. for /l %%i in (1 1 9) do (
  7.    set /p=  !var:~0,%%i!!ko!!var:~-%%i!<nul
  8.    for /l %%a in (1 1 800) do ver>nul
  9.    set /p=!t!<nul
  10.    set ko=!ko:~2!
  11. )
  12. pause>nul
复制代码

作者: novaa    时间: 2007-12-30 00:17


哈哈
就是这个啦!!
作者: youxi01    时间: 2007-12-30 11:40     标题: 回复 1# 的帖子

有点瑕疵:觉得不是很流畅...
作者: newyj    时间: 2007-12-30 21:01

set /p=!t!<nul
   set ko=!ko:~2!
这两句不是太懂的  在这个P中起什么作用
还有就是我把for /l %%a in (1 1 80) do set t=!t!删了的话 就不行了
还请讲解一下 谢谢了
作者: novaa    时间: 2007-12-30 21:48

原帖由 newyj 于 2007-12-30 21:01 发表
set /p=!t!


你应该知道这个用法吧。
set /p bathome=请输入帐号:
这里set /p=!t!<nul就是不要求用户输入。而是从空设备输入。同时!t!起退格符的作用。

对于第二个!ko:~2!请在教学区看随风版主的截止符的作用。
第三个是关于退格符的作用。请看模拟2K开机条这个帖子。
作者: newyj    时间: 2007-12-31 11:12

我主要是不知道随风斑竹写的这个是怎么能实现从两边显示的
能否讲解一下 这里的原理
作者: ieutk    时间: 2007-12-31 15:25

我主要是不知道随风斑竹写的这个是怎么能实现从两边显示的
能否讲解一下 这里的原理
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set var=欢迎光临批处理之家
复制代码
上面几段就不用作解释了吧,想必大家都明白
  1. for /l %%a in (1 1 80) do set t=!t!
复制代码
这一段代码就是预设变量t的值为80个
如果用户CMD窗口大小没有自定义,默认的长方向应该就是80左右吧
  1. for /l %%a in (1 1 36) do set ko= !ko!
复制代码
[这一段代码就是预设变量ko的值为36个 ]

这个符号我也不知道是什么符号,就当它是两字节的空格吧,上面为了好看所以用括号括起来
  1. for /l %%i in (1 1 9) do (
  2.    set /p=  !var:~0,%%i!!ko!!var:~-%%i!<nul
  3.    for /l %%a in (1 1 800) do ver>nul
  4.    set /p=!t!<nul
  5.    set ko=!ko:~2!
  6. )
复制代码
这是一个FOR嵌套语句,是整个代码的关键部份
  1. set /p=  !var:~0,%%i!!ko!!var:~-%%i!<nul
复制代码
看这一句,set/p=<nul的用法5楼己经说过

  1. !var:~0,%%i!!ko!!var:~-%%i!
复制代码


这一行就是你想了解的怎么能实现从两边显示

!var:~0,%%i!就是变量的截取功能,第一次它的值是"欢",第二次是"欢迎"以此类推
!ko!就不用说了,上面有解说过
!var:~-%%i!这个也是变量的截取功能,第一次它的值是"家",第二次是"之家"以此类推
  1. for /l %%a in (1 1 800) do ver>nul
复制代码
这个代码是起延时作用的
  1. set /p=!t!<nul
复制代码
这个呢就是删除的意思,删除原先的,再显示,cls清屏也可以做到,但是用cls清屏给人的感觉是一跳一跳的,不流畅
  1. set ko=!ko:~2!
复制代码
这行代码也是变量的截取功能,在变量ko中截取第三个开始的后面所有值,也就是舍去前面两位值


呵呵,能力有限,不知说的对不对

[ 本帖最后由 ieutk 于 2007-12-31 15:33 编辑 ]
作者: youxi01    时间: 2008-1-1 09:38

呵呵,年轻人解释的不错嘛




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