最近我对批处理的学习有点感兴趣了,学到了不少东西,以前我以为批处理就是一个单调的黑白世界,但是,当我看到了一些精彩的程序后,才知道原来批处理可以这样,原来黑白世界也精彩。
精彩实例1--- 弹动的小球: | @echo off&mode con cols=20 lines=29&color 2c | | setlocal enabledelayedexpansion | | title 弹球-zw19750516 | | set a=●&set "b= " | | :begin | | cls&set n=0 | | set /a lm=%random%%%19,lr=%random%%%2 | | if %lm% equ 0 ( | | set z=+ | | ) else ( | | if %lm% equ 17 ( | | set z=- | | ) else ( | | if %lr% equ 0 ( | | set z=- | | ) else ( | | set z=+ | | ) | | ) | | ) | | :contin | | set "kong=" | | set /a n+=1,lm%z%=1 | | for /l %%i in (1,1,%lm%) do set kong=!kong!%b% | | set str%n%=%kong%%a% | | if %n% equ 30 goto begin | | if %lm% equ 0 set z=+ | | if %lm% equ 17 set z=- | | set /p=!str%n%!nul | | for /l %%i in (1,1,20) do set /p= <NUL | | echo. | | goto continCOPY |
精彩实例2---跳动的小球 | @echo off&setlocal enabledelayedexpansion | | mode con: cols=81 lines=30&color 1f | | :: code by 随风@bbs.bathome.net 2008/01/03 | | :loop | | for /l %%a in (1 1 40) do ( | | if defined sang ( | | cls&set /a di-=1 | | for /l %%i in (1 1 !di!) do echo. | | ) else (echo.&set /a di+=1) | | if defined zuo (set ko=!ko:~1!) else set ko= !ko! | | set /p=!ko!●<nul | | for /l %%i in (1 1 80) do ver>nul | | set /p= <nul | | if not "!ko:~38,1!"=="" set zuo=ok | | if "!ko!"=="" set zuo=&set "ko= " | | if !di! lss 0 set sang=&goto loop | | if !di! geq 29 set sang=ok&goto loop | | )COPY |
精彩实例3----五彩的世界 | @echo off | | ::输出彩色字符 | | mode con lines=24 cols=69 | | set "a= One World !" | | set "b= one Dream !" | | set "c= 让我们大家一起说" | | set "d=︱ bbs.cn-dos.net is our common home!" | | set "e= {Author∶jvive︱08-03-31︱Thanks to∶9527}" | | set "x= ︱" | | set "p=★★★★★★★★★★★★★★★" | | set "k=" | | pushd %tmp% | | del/q "%a%?" "%b%?" "%c%?" "%d%?" "%e%?" "%x%?" "%p%?" 2>nul | | call:enter 3 | | call:JV a "%a%" 0 | | call:JV b "%b%" 0 | | call:JV c "%c%" 0 | | call:enter 5 | | call:JV 0100 0 0 | | call:JV 040a "%d%" 0 | | call:JV 040a "%x%" 0 | | call:JV 0100 000 0 | | call:JV 040b "%d%" 0 | | call:JV 040b "%x%" 0 | | call:JV 0100 000 0 | | call:JV 0400 "%d%" 0 | | call:JV 0400 "%x%" 0 | | call:JV 0100 0 1 | | call:enter 3 | | call:JV e "%e%" 0 | | call:JV 0100 0 1 | | echo. | | call:color | | pause>nul&exit/b | | rem ---------subprocess-------- | | :color|一二层第一个色调混合为主色调,最后一个为闪烁停留色调. | | for %%a in (0 e)do ( | | for %%b in (a 1 2 3 4 5 6 7 8 0 c b d f e)do ( | | call set "k=%%k%%" | | call:bak %%a%%b "%p%" 0 | | )) | | goto :eof | | :JV | | :bak | | if %3 neq 1 (set/p=%k%"%~2") else echo.>"%~2" | | if %0 neq :bak (set k=) else set "k=%k%" | | findstr /a:%1 .* "%~2?" | | del "%~2?" | | goto :eof | | :enter | | for /l %%a in (1 1 %1)do echo.COPY |
看了这些精彩的实例,这个黑白世界变的有点可爱了。然该死的微软,关于批处理的资料说的是那样的含糊,
把批处理弄的象一个黑色的暗箱。让人学习批处理的难度,远远大于学习其它高级语言,正是上贼船容易,熟悉贼性难于上青天,所以高手的经验,就显得特别的重要。
在这里我将把我看到的一些好的东西记录下来。这样可以防此遗忘。我以后在要找这些东西,我以有个查阅的地方。
------------------NOTE-----------------
---停此shift创建的循环---- | | | @echo off | | call:one 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | | goto:eof | | :one | | echo %5 | | if %5a==a goto:eof | | shift | | goto oneCOPY |
---------
今天读书时看到了,如何停此由shift构造的循环。以前我还真的不知道,长知识了。
if %5a==a goto:eof
if %3a==a goto:eof
if %8a==a goto:eof
if %5#==# goto:eof
原来是这样停下来的。呵呵
----让变量名动态的变化
[/code] | @echo off | | | | set tt=123 | | for /l %%i in (0 1 10) do ( | | set tt%%i=%tt% | | set tt%%i | | set tt%%i= | | ) | | echo ------ | | | | set var=123 | | setlocal enabledelayedexpansion | | for /l %%i in (0 1 10) do ( | | set /a n+=1 | | set var!n!=%var% | | set var!n! | | ) | | echo ------ | | | | set tt=123 | | call:one 1 2 3 4 5 6 7 8 9 10 | | goto:eof | | :one | | set tt%1=%tt% | | set tt%1 | | shift | | if %1a==a goto:eof | | goto one | | | | echo ------ | | rem 追加值 | | setlocal enabledelayedexpansion | | for /l %%i in (0 1 10) do ( | | set tt=!tt! %%i | | set tt | | ) | | echo ------------------ | | call:one 1 2 3 4 5 6 7 8 9 10 | | goto:eof | | :one | | set tt=%tt% %1 | | set tt | | shift | | if %1a==a goto:eof | | goto oneCOPY |
| @echo off | | | | set tt=001234 | | for /f "delims=0" %%i in ("%tt%") do ( | | echo %%i | | ) | | echo ---- | | set /a "tt=1001234 %%1000000" | | set tt | | COPY |
精彩实例4----变动的方框 | ::这一版本的编辑---if exist Q523066680 | | | | @echo off&mode con cols=60 lines=30 &color 0a | | setlocal enabledelayedexpansion | | set omax=oooooooooooooooooooooooooooooooooooooooo | | set kmax=%omax:o= % | | set n=4 | | | | :a | | set /a n+=4 | | set /a upkh=15-%n%/4,kleft=30-%n%/2,zk=%n%-4,zkh=%n%/2-2 | | set leftk=!kmax:~0,%kleft%! | | set zk=oo!kmax:~0,%zk%!oo | | set hang=!omax:~0,%n%! | | for /l %%a in (1,1,%upkh%) do echo. | | echo.%leftk%%hang% | | for /l %%a in (1,1,%zkh%) do echo.%leftk%%zk% | | echo.%leftk%%hang% | | echo.%n% | | for /l %%a in (1,1,2) do ping -n>nul | | cls | | if %n%==40 set /a n=4 | | goto aCOPY |
[ 本帖最后由 myzwd 于 2009-3-20 19:13 编辑 ] |