标题: [游戏娱乐] 批处理实现字符串左右移动 [打印本页]
作者: youxi01 时间: 2007-12-16 00:10 标题: 批处理实现字符串左右移动
最近,本论坛对 批处理 动画"研究"似乎比较热
为跟潮流,也为打发一些不太快乐的时光,作一批处理,以博一笑。
动画效果:字符串向左移动到 最左端,然后右移,到一定程度,再左移...- @echo off %=======关闭回显========%
- Rem '/*程序名称:动画显示示例
- Rem '/*程序说明:实现一段字符从左到右、从右到左的移动效果
- Rem '/*作者:youxi01@bbs.bathome.net
- Rem '/*时间:于2007-12-15
- Rem '/*------开启延迟变量----------
- setlocal enabledelayedexpansion
- for /l %%i in (1 1 5) do echo.
- color 1f
- Rem '/*=======此处字符可以根据需要自行修改========
- set "str=欢迎光临论坛:bbs.bathome.net"
- set "space= "
- call :ShowStr "%space%%str%"
- call :Move_Left "%space%%str%"
- pause>nul
- Rem '/*=========延时"函数"===========
- :Delay_Time num(次数)
- for /l %%i in (0 1 %1) do ver>nul
- goto :eof
- Rem '/*========动画"函数"1(出现效果)========
- :ShowStr str
- title bbs.bathome.net -- 正在载入动画...
- set "Sstr=%~1"
- for /l %%i in (0 1 60) do set /p=!Sstr:~%%i,1!<nul& call :Delay_Time 200
- goto :eof
- Rem '/*========动画函数2(向左移动)==========
- :Move_Left str
- title bbs.bathome.net -- 字符正在往左移...
- set "Lstr=%~1"
- for /l %%i in (0 1 200) do (
- set "Lstr_=!Lstr:~%%i,60!
- if not "!Lstr:~%%i,1!"==" " call :Move_Right %str%
- for /l %%j in (0 1 80) do set /p=<nul
- set /p=!Lstr_!<nul & call :Delay_Time 150)
- Rem '/*========动画函数2(向右移动)==========
- :Move_Right str
- title bbs.bathome.net -- 字符正在往右移...
- set "Rstr=%~1"
- for /l %%i in (0 1 30) do (
- set "Rstr= !Rstr!"
- for /l %%j in (0 1 80) do set /p=<nul
- set /p=!Rstr!<nul & call :Delay_Time 150)
- ping /n 3 127.1>nul
- call :Move_Left "%space%%str%"
复制代码
作者: foxJL 时间: 2007-12-16 00:32
效果越来越强.
我一直都没有加说明的习惯,这点得学习学习
作者: 随风 时间: 2007-12-16 00:45
呵呵,youxi 给你缩缩水
:- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1 1 40) do call set ko= %%ko%%
- set "str=%ko%欢迎光临论坛:bbs.bathome.net "
- set bt=右&set "bt2=左"&color 1f
- echo\&echo\&echo\&echo\&echo\&echo\&echo\
- :lis
- set bt=%bt2%&set bt2=%bt%
- title bbs.bathome.net -- 字符正在往!bt!移...
- for /l %%i in (1 1 30) do (
- set /p=!str!<nul
- for /l %%a in (1 1 100) do ver>nul
- for /l %%a in (1 1 100) do set /p=<nul
- if "!bt!"=="左" (set str=!str:~1,-1! ) else (set str= !str!)
- )
- goto lis
复制代码
[ 本帖最后由 随风 于 2007-12-16 04:33 编辑 ]
作者: youxi01 时间: 2007-12-16 01:09
:lis
set bt=%bt2%&set bt2=%bt%
这里妙极,重复运行的时候,自动换 成 左和右 ,呵呵。
总体上来说,代码非常不错!!!
作者: youxi01 时间: 2007-12-16 01:12
不过有点点建议:
根据编程习惯,3F的变量num,还是定义为flag(用来标志)更容易让人接受
作者: 随风 时间: 2007-12-16 01:26
你是说把num换成flag 么?
flag 是什么意识? 英语吗?
可以更简单,不用 num 变量
[ 本帖最后由 随风 于 2007-12-16 04:33 编辑 ]
作者: youxi01 时间: 2007-12-16 11:36
flag是E文 标志 的意思
有时候代码不是一味的追求简洁,比方说变量,不是说为了减少 字符数,就尽量把变量名设置为一个字母等;
代码除了简洁,还要易读
作者: novaa 时间: 2007-12-16 13:00
我也给你简单一下- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1 1 40) do call set ko= %%ko%%
复制代码
换为- @echo off&setlocal enabledelayedexpansion
- for /l %%i in (1 1 40) do set ko= !ko!
复制代码
随风版主写的代码的使用call 来延迟变量的地方有些没有必要?或许时习惯让你这样写的?
作者: 随风 时间: 2007-12-16 17:34
呵呵,没注意,原来是打算把 延迟变量 放在for里的。后来发现行不通,这句忘改过来了。
to 7 楼
使用变量名并不是如你说的 "一味的追求简洁,和为了减少 字符数,"
只是英文在下确实是一个单词都不认识,变量名,在我这里就仅仅是个变量名而已.
虽然写代码也很喜欢 追求简洁,但是我还是清楚什么是简洁,什么是一味的追求,减少字符数.的
减少字符数能叫简洁吗? 使用一个字母作变量名,并不是为了简洁,仅仅只是为了书写方便.
总不至于为了代码易读,要我去重学E文吧!
[ 本帖最后由 随风 于 2007-12-16 17:43 编辑 ]
作者: 追月 时间: 2007-12-17 11:48
随风精简得似乎更好, 让字符居中, 支持!
作者: xurun163 时间: 2008-3-12 10:19
你们太强了!我爱你们
作者: sampeck 时间: 2009-6-26 17:08
发现代码越来越强了~~~~
作者: garyng 时间: 2011-9-1 20:37
怎么我的看不到效果啊?
标题在改而已~
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |