最近我对批处理的学习有点感兴趣了,学到了不少东西,以前我以为批处理就是一个单调的黑白世界,但是,当我看到了一些精彩的程序后,才知道原来批处理可以这样,原来黑白世界也精彩。
精彩实例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 contin
复制代码 精彩实例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
- )
复制代码 精彩实例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.
复制代码 看了这些精彩的实例,这个黑白世界变的有点可爱了。然该死的微软,关于批处理的资料说的是那样的含糊,
把批处理弄的象一个黑色的暗箱。让人学习批处理的难度,远远大于学习其它高级语言,正是上贼船容易,熟悉贼性难于上青天,所以高手的经验,就显得特别的重要。
在这里我将把我看到的一些好的东西记录下来。这样可以防此遗忘。我以后在要找这些东西,我以有个查阅的地方。
------------------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 one
复制代码 ---------
今天读书时看到了,如何停此由shift构造的循环。以前我还真的不知道,长知识了。
if %5a==a goto:eof
if %3a==a goto:eof
if %8a==a goto:eof
if %5#==# goto:eof
原来是这样停下来的。呵呵
----让变量名动态的变化
[/code]- @echo off
- rem 让变量名字动态的变化
- 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 one
复制代码
- @echo off
- rem 看到两种去掉左面0的方法
- set tt=001234
- for /f "delims=0" %%i in ("%tt%") do (
- echo %%i
- )
- echo ----
- set /a "tt=1001234 %%1000000"
- set tt
- rem (1000000+1234)/1000000=1234
复制代码 精彩实例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 a
复制代码
[ 本帖最后由 myzwd 于 2009-3-20 19:13 编辑 ] |