返回列表 发帖

[游戏娱乐] 批处理实现字符串左右移动

最近,本论坛对 批处理 动画"研究"似乎比较热
为跟潮流,也为打发一些不太快乐的时光,作一批处理,以博一笑。
动画效果:字符串向左移动到 最左端,然后右移,到一定程度,再左移...
@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%"COPY
1

评分人数

    • foxJL: 越来越精彩了PB + 8

怎么我的看不到效果啊?
标题在改而已~

TOP

发现代码越来越强了~~~~

TOP

你们太强了!我爱你们

TOP

随风精简得似乎更好, 让字符居中, 支持!

TOP

呵呵,没注意,原来是打算把 延迟变量 放在for里的。后来发现行不通,这句忘改过来了。
to   7 楼
    使用变量名并不是如你说的 "一味的追求简洁,和为了减少 字符数,"
只是英文在下确实是一个单词都不认识,变量名,在我这里就仅仅是个变量名而已.
虽然写代码也很喜欢 追求简洁,但是我还是清楚什么是简洁,什么是一味的追求,减少字符数.的
减少字符数能叫简洁吗?   使用一个字母作变量名,并不是为了简洁,仅仅只是为了书写方便.
总不至于为了代码易读,要我去重学E文吧!

[ 本帖最后由 随风 于 2007-12-16 17:43 编辑 ]
技术问题请到论坛发帖求助!

TOP

我也给你简单一下
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1 1 40) do call set ko= %%ko%%COPY
换为
@echo off&setlocal enabledelayedexpansion
for /l %%i in (1 1 40) do set ko= !ko!COPY
随风版主写的代码的使用call 来延迟变量的地方有些没有必要?或许时习惯让你这样写的?
ㄗs:A good programming is 99% sweat and 1% coffee!--①個亾

============ >   hi.baidu.com/novaa   <============

TOP

flag是E文 标志 的意思
有时候代码不是一味的追求简洁,比方说变量,不是说为了减少 字符数,就尽量把变量名设置为一个字母等;
代码除了简洁,还要易读

TOP

你是说把num换成flag 么?
flag 是什么意识?  英语吗?
可以更简单,不用 num 变量

[ 本帖最后由 随风 于 2007-12-16 04:33 编辑 ]
技术问题请到论坛发帖求助!

TOP

不过有点点建议:
根据编程习惯,3F的变量num,还是定义为flag(用来标志)更容易让人接受

TOP

:lis
set bt=%bt2%&set bt2=%bt%

这里妙极,重复运行的时候,自动换 成 左和右 ,呵呵。

总体上来说,代码非常不错!!!

TOP

呵呵,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 lisCOPY

[ 本帖最后由 随风 于 2007-12-16 04:33 编辑 ]
1

评分人数

技术问题请到论坛发帖求助!

TOP

效果越来越强.

我一直都没有加说明的习惯,这点得学习学习

TOP

返回列表