Board logo

标题: [游戏娱乐] 批处理实现字符串左右移动 [打印本页]

作者: youxi01    时间: 2007-12-16 00:10     标题: 批处理实现字符串左右移动

最近,本论坛对 批处理 动画"研究"似乎比较热
为跟潮流,也为打发一些不太快乐的时光,作一批处理,以博一笑。
动画效果:字符串向左移动到 最左端,然后右移,到一定程度,再左移...
  1. @echo off %=======关闭回显========%
  2. Rem '/*程序名称:动画显示示例
  3. Rem '/*程序说明:实现一段字符从左到右、从右到左的移动效果
  4. Rem '/*作者:youxi01@bbs.bathome.net
  5. Rem '/*时间:于2007-12-15
  6. Rem '/*------开启延迟变量----------
  7. setlocal enabledelayedexpansion
  8. for /l %%i in (1 1 5) do echo.
  9. color 1f
  10. Rem '/*=======此处字符可以根据需要自行修改========
  11. set "str=欢迎光临论坛:bbs.bathome.net"
  12. set "space=                              "
  13. call :ShowStr "%space%%str%"
  14. call :Move_Left "%space%%str%"
  15. pause>nul
  16. Rem '/*=========延时"函数"===========
  17. :Delay_Time num(次数)
  18. for /l %%i in (0 1 %1) do ver>nul
  19. goto :eof
  20. Rem '/*========动画"函数"1(出现效果)========
  21. :ShowStr str
  22. title bbs.bathome.net -- 正在载入动画...
  23. set "Sstr=%~1"
  24. for /l %%i in (0 1 60) do set /p=!Sstr:~%%i,1!<nul& call :Delay_Time 200
  25. goto :eof
  26. Rem '/*========动画函数2(向左移动)==========
  27. :Move_Left str
  28. title bbs.bathome.net -- 字符正在往左移...
  29. set "Lstr=%~1"
  30. for /l %%i in (0 1 200) do (
  31.     set "Lstr_=!Lstr:~%%i,60!
  32.     if not "!Lstr:~%%i,1!"==" " call :Move_Right %str%
  33.     for /l %%j in (0 1 80) do set /p=<nul
  34.     set /p=!Lstr_!<nul & call :Delay_Time 150)
  35. Rem '/*========动画函数2(向右移动)==========
  36. :Move_Right str
  37. title bbs.bathome.net -- 字符正在往右移...
  38. set "Rstr=%~1"
  39. for /l %%i in (0 1 30) do (
  40.     set "Rstr= !Rstr!"
  41.     for /l %%j in (0 1 80) do set /p=<nul
  42.     set /p=!Rstr!<nul & call :Delay_Time 150)
  43. ping /n 3 127.1>nul
  44. call :Move_Left "%space%%str%"
复制代码

作者: foxJL    时间: 2007-12-16 00:32

效果越来越强.

我一直都没有加说明的习惯,这点得学习学习
作者: 随风    时间: 2007-12-16 00:45

呵呵,youxi 给你缩缩水
:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1 1 40) do call set ko= %%ko%%
  3. set "str=%ko%欢迎光临论坛:bbs.bathome.net "
  4. set bt=右&set "bt2=左"&color 1f
  5. echo\&echo\&echo\&echo\&echo\&echo\&echo\
  6. :lis
  7. set bt=%bt2%&set bt2=%bt%
  8. title bbs.bathome.net -- 字符正在往!bt!移...
  9. for /l %%i in (1 1 30) do (
  10.    set /p=!str!<nul
  11.    for /l %%a in (1 1 100) do ver>nul
  12.    for /l %%a in (1 1 100) do set /p=<nul
  13.    if "!bt!"=="左" (set str=!str:~1,-1! ) else (set str= !str!)
  14. )
  15. 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

我也给你简单一下
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%i in (1 1 40) do call set ko= %%ko%%
复制代码
换为
  1. @echo off&setlocal enabledelayedexpansion
  2. 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://bbs.bathome.net/) Powered by Discuz! 7.2