[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理读书笔记

最近我对批处理的学习有点感兴趣了,学到了不少东西,以前我以为批处理就是一个单调的黑白世界,但是,当我看到了一些精彩的程序后,才知道原来批处理可以这样,原来黑白世界也精彩。

     精彩实例1--- 弹动的小球:
  1. @echo off&mode con cols=20 lines=29&color 2c
  2. setlocal enabledelayedexpansion
  3. title 弹球-zw19750516
  4. set a=●&set "b= "
  5. :begin
  6. cls&set n=0
  7. set /a lm=%random%%%19,lr=%random%%%2
  8. if %lm% equ 0 (
  9. set z=+
  10. ) else (
  11. if %lm% equ 17 (
  12. set z=-
  13. ) else (
  14. if %lr% equ 0 (
  15. set z=-
  16. ) else (
  17. set z=+
  18. )
  19. )
  20. )
  21. :contin
  22. set "kong="
  23. set /a n+=1,lm%z%=1
  24. for /l %%i in (1,1,%lm%) do set kong=!kong!%b%
  25. set str%n%=%kong%%a%
  26. if %n% equ 30 goto begin
  27. if %lm% equ 0 set z=+
  28. if %lm% equ 17 set z=-
  29. set /p=!str%n%!nul
  30. for /l %%i in (1,1,20) do set /p= <NUL
  31. echo.
  32. goto contin
复制代码
精彩实例2---跳动的小球
  1. @echo off&setlocal enabledelayedexpansion
  2. mode con: cols=81 lines=30&color 1f
  3. :: code by 随风@bbs.bathome.net 2008/01/03
  4. :loop
  5. for /l %%a in (1 1 40) do (
  6.   if defined sang (
  7.   cls&set /a di-=1
  8.   for /l %%i in (1 1 !di!) do echo.
  9. ) else (echo.&set /a di+=1)
  10.   if defined zuo (set ko=!ko:~1!) else set ko= !ko!
  11.   set /p=!ko!●<nul
  12.   for /l %%i in (1 1 80) do ver>nul
  13.   set /p=  <nul
  14.   if not "!ko:~38,1!"=="" set zuo=ok
  15.   if "!ko!"=="" set zuo=&set "ko= "
  16.   if !di! lss 0 set sang=&goto loop
  17.   if !di! geq 29 set sang=ok&goto loop
  18. )
复制代码
精彩实例3----五彩的世界
  1. @echo off
  2. ::输出彩色字符
  3. mode con lines=24 cols=69
  4. set "a= One World !"
  5. set "b= one Dream !"
  6. set "c= 让我们大家一起说"
  7. set "d=︱ bbs.cn-dos.net is our common home!"
  8. set "e= {Author∶jvive︱08-03-31︱Thanks to∶9527}"
  9. set "x= ︱"
  10. set "p=★★★★★★★★★★★★★★★"
  11. set "k="
  12. pushd %tmp%
  13. del/q "%a%?" "%b%?" "%c%?" "%d%?" "%e%?" "%x%?" "%p%?" 2>nul
  14. call:enter 3
  15. call:JV a "%a%" 0
  16. call:JV b "%b%" 0
  17. call:JV c "%c%" 0
  18. call:enter 5
  19. call:JV 0100 0 0
  20. call:JV 040a "%d%" 0
  21. call:JV 040a "%x%" 0
  22. call:JV 0100 000 0
  23. call:JV 040b "%d%" 0
  24. call:JV 040b "%x%" 0
  25. call:JV 0100 000 0
  26. call:JV 0400 "%d%" 0
  27. call:JV 0400 "%x%" 0
  28. call:JV 0100 0 1
  29. call:enter 3
  30. call:JV e "%e%" 0
  31. call:JV 0100 0 1
  32. echo.
  33. call:color
  34. pause>nul&exit/b
  35. rem ---------subprocess--------
  36. :color|一二层第一个色调混合为主色调,最后一个为闪烁停留色调.
  37. for %%a in (0 e)do (
  38. for %%b in (a 1 2 3 4 5 6 7 8 0 c b d f e)do (
  39. call set "k=%%k%%"
  40. call:bak %%a%%b "%p%" 0
  41. ))
  42. goto :eof
  43. :JV
  44. :bak
  45. if %3 neq 1 (set/p=%k%"%~2") else echo.>"%~2"
  46. if %0 neq :bak (set k=) else set "k=%k%"
  47. findstr /a:%1 .* "%~2?"
  48. del "%~2?"
  49. goto :eof
  50. :enter
  51. for /l %%a in (1 1 %1)do echo.
复制代码
看了这些精彩的实例,这个黑白世界变的有点可爱了。然该死的微软,关于批处理的资料说的是那样的含糊,
把批处理弄的象一个黑色的暗箱。让人学习批处理的难度,远远大于学习其它高级语言,正是上贼船容易,熟悉贼性难于上青天,所以高手的经验,就显得特别的重要。

     在这里我将把我看到的一些好的东西记录下来。这样可以防此遗忘。我以后在要找这些东西,我以有个查阅的地方。

------------------NOTE-----------------
---停此shift创建的循环----
  1. @echo off
  2. 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
  3. goto:eof
  4. :one
  5. echo %5
  6. if %5a==a goto:eof
  7. shift
  8. goto one
复制代码
---------
今天读书时看到了,如何停此由shift构造的循环。以前我还真的不知道,长知识了。
if %5a==a goto:eof

if %3a==a goto:eof

if %8a==a goto:eof

if %5#==# goto:eof
原来是这样停下来的。呵呵

----让变量名动态的变化


[/code]
  1. @echo off
  2. rem 让变量名字动态的变化
  3. set tt=123
  4. for /l %%i in (0 1 10) do (
  5. set tt%%i=%tt%
  6. set tt%%i
  7. set tt%%i=
  8. )
  9. echo ------
  10. set var=123
  11. setlocal enabledelayedexpansion
  12. for /l %%i in (0 1 10) do (
  13.    set /a n+=1
  14.    set var!n!=%var%
  15.    set var!n!
  16. )
  17. echo ------
  18. set tt=123
  19. call:one 1 2 3 4 5 6 7 8 9 10
  20. goto:eof
  21. :one
  22. set tt%1=%tt%
  23. set tt%1
  24. shift
  25. if %1a==a goto:eof
  26. goto one
  27. echo ------
  28. rem 追加值
  29. setlocal enabledelayedexpansion
  30. for /l %%i in (0 1 10) do (
  31. set tt=!tt! %%i
  32. set tt
  33. )
  34. echo ------------------
  35. call:one 1 2 3 4 5 6 7 8 9 10
  36. goto:eof
  37. :one
  38. set tt=%tt% %1
  39. set tt
  40. shift
  41. if %1a==a goto:eof
  42. goto one
复制代码
  1. @echo off
  2. rem 看到两种去掉左面0的方法
  3. set tt=001234
  4. for /f "delims=0" %%i in ("%tt%") do (
  5. echo %%i
  6. )
  7. echo ----
  8. set /a "tt=1001234 %%1000000"
  9. set tt
  10. rem  (1000000+1234)/1000000=1234
复制代码
精彩实例4----变动的方框
  1. ::这一版本的编辑---if exist    Q523066680
  2. @echo off&mode con cols=60 lines=30 &color 0a
  3. setlocal enabledelayedexpansion
  4. set omax=oooooooooooooooooooooooooooooooooooooooo
  5. set kmax=%omax:o= %
  6. set n=4
  7. :a
  8. set /a n+=4
  9. set /a upkh=15-%n%/4,kleft=30-%n%/2,zk=%n%-4,zkh=%n%/2-2
  10. set leftk=!kmax:~0,%kleft%!
  11. set zk=oo!kmax:~0,%zk%!oo
  12. set hang=!omax:~0,%n%!
  13. for /l %%a in (1,1,%upkh%) do echo.
  14. echo.%leftk%%hang%
  15. for /l %%a in (1,1,%zkh%) do echo.%leftk%%zk%
  16. echo.%leftk%%hang%
  17. echo.%n%
  18. for /l %%a in (1,1,2) do ping -n>nul
  19. cls
  20. if %n%==40 set /a n=4
  21. goto a
复制代码

[ 本帖最后由 myzwd 于 2009-3-20 19:13 编辑 ]
1

评分人数

set /p 与nul的配合

dos中常用的显示命令是echo,我看到别人用set /p来显示数据,于是就跟着学,特别是把set/p 和nul配合使用
  1. @echo off
  2. set /p=a123a <nul
  3. echo b123b
复制代码
结果会显示---a123a b123b
这相当于把前后连了起来。
  1. @echo off
  2. echo a123a111111 & dir^  
  3. d:
复制代码
这于字符连字号 ^ 的效果一样。
这个符号 ^ 是dos里面的多义词
  1. echo
  2. echo.123
复制代码
echo后面加一点 可以屏蔽错误信息。
  1. @echo off
  2. rem 3x4矩阵的转置,看了几个帖子,于是我也有了一种冲动,就编写了这个矩阵转置的程序
  3. setlocal enabledelayedexpansion
  4. for /f "tokens=1-4" %%1 in ('more +14 %~s0') do (
  5. set tt=!tt! %%1 %%2 %%3 %%4
  6. )
  7. call:one %tt%
  8. goto:eof
  9. :one
  10. echo %1 %5 %9
  11. shift
  12. if %9.==. goto :eof
  13. goto one
  14. goto:eof
  15. 11 12 13 14
  16. 21 22 23 24
  17. 31 32 33 34
复制代码
------如何利用findstr把输入的字变为彩色的字----函数应用
  1. @echo off
  2. rem 2009-3-5---findstr让输入的字成为彩色字体的方案
  3. set tt="I LOVE HOME OF BATCH"
  4. call:one %tt%
  5. goto:eof
  6. :one
  7. set /p=    <nul>%1
  8. rem 生存类文本,无扩展名,nul让字符串提前的性质
  9. findstr /a:24 .* "%~n1?"
  10. rem 这里加载类文本 这里的%1指向call:one后的%tt%,代表文件名
  11. rem 利用findstr对于非内容的特定字符会显示彩色的特性,最后显示彩色文本
  12. del %1
  13. rem 删除生存的类文本
  14. set tt=
  15. rem 整体构思是利用了批函数 ,具有参数的要点来设置程序的
  16. echo.
  17. echo.
  18. echo ----下面是对比程序--
  19. set tt="I LOVE HOME OF BATCH"
  20. call:two %tt%
  21. goto:eof
  22. :two
  23. findstr /a:24 .* "%~n1?"
  24. set tt=
  25. rem 上面的代码可以简化如下,这样更能看出本质来
  26. @echo off
  27. call:one 我来了 你好 啊
  28. goto:eof
  29. :one
  30. set /p=>%1
  31. findstr /a:24 .* "%1*"
  32. rem %1始终指向 call:one 后面的字符常量,"%~1*"这里是生存的文件,引号很重要。
  33. rem 没有用nul 就要回车才可以看到文字 冒号可以用这个字符,退格符号删去
复制代码
  1. @echo off
  2. echo ------采用2,3,4为16进制数显示彩色字体  实验程序---
  3. findstr /n /a:12 .*   %~s0
  4. findstr /n /a:c24 .*  %~s0
  5. findstr /n /a:24 .*   %~s0
  6. findstr /n /a:120c .* %~s0
  7. echo -----退格符号,删去显示-------
  8. findstr /n /a:12 .*  %~s0
  9. findstr /n /a:c24 .*  %~s0
  10. findstr /n /a:24 .*   %~s0
  11. findstr /n /a:120c .* %~s0
  12. rem 在阴影上3位数,画格子,4位数画竖线,也就是说3位以上的数字就产生花纹。
  13. goto:eof
  14. 仗剑江湖  仗剑江湖   仗剑江湖a
  15. 仗剑江湖  仗剑江湖   仗剑江湖b
  16. 仗剑江湖  仗剑江湖   仗剑江湖c
复制代码
最后 color 与findstr可以配合使用


数学计算:findstr的阴影部分是2位hex,共能产生16*16=256种色彩,花纹部分也是2bit的hex 这也有256种。
色彩就这么多,多一种都不可能有。

下面的说明了符号 是如何产生的。
*******************************************************************
1----进入edit
2----按下 ctrl+p ,松开,要松开!这时在edit中什么都看不到
3---接着按下backspace退格键,此时就看到了这个符号
4--保存到记事本中就可以了。


==========================================================
   全屏cmd ----  修改注册表 路径:HKCU\CONSOLe\   FULLSCREEN  VALUE=1(全屏),0(非全屏)


  1. @echo off
  2. echo 让findstr只显示标签,实现输入彩色字
  3. echo.>中国足球是笑话
  4. findstr /a:0c z* 中国足球是笑话*
  5. del /q 中国足球是笑话
  6. rem cmd将显示的是---红色的--- “中国足球是笑话:”
复制代码


[ 本帖最后由 myzwd 于 2009-3-19 09:43 编辑 ]

TOP

与楼主有同感!想进一步,可批处理比较全面系统的教程都不知在那里有,看高手的代码,大部分看不懂,又没有解释,批处理想提高真的比学高级语言还难!

TOP

回复 3楼 的帖子

本版有很多教程,不知你看过了哪些?
高手的代码看不懂没关系,哪行不懂就发帖问哪行,自然有热心人给你解释。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

如何插入html代码?

  1. @echo off
  2. ::我一直在想如果用dos调用html代码,今天我算是找到方法了2007-3-6 by myzwd。
  3. call:one my.htm
  4. goto:eof
  5. :one
  6. more +9 %~s0>my.htm
  7. start %1
  8. del my.htm
  9. goto:eof
  10. <html >
  11. <head>
  12. <title>myzwd123456</title>
  13. </head>
  14. <body>
  15. <u>中国</u>
  16. <font color=red><marquee>myzwd </marquee></font>
  17. <table width="200" border="1">
  18.   <tr>
  19.     <td>myzwd</td>
  20.     <td bgcolor="#FF00FF">看</td>
  21.     <td bgcolor="#99CC00">看</td>
  22.     <td bgcolor="#9933FF">插</td>
  23.   </tr>
  24.   <tr>
  25.     <td>myzwd</td>
  26.     <td bgcolor="#FF00FF">入</td>
  27.     <td bgcolor="#99CC00">表</td>
  28.     <td bgcolor="#9933FF">格</td>
  29.   </tr>
  30.   <tr>
  31.     <td>myzwd</td>
  32.     <td bgcolor="#FF00FF">行</td>
  33.     <td bgcolor="#99CC00">不</td>
  34.     <td bgcolor="#9933FF">行</td>
  35.   </tr>
  36. </body>
  37. </html>
复制代码
  1. @echo off
  2. :<!--
  3. rem 我一直在想如果用dos调用html代码,今天我算是找到方法了2007-3-6 by myzwd。
  4. call:one my.htm
  5. goto:eof
  6. :one
  7. more +1 %~s0>my.htm
  8. start %1
  9. del my.htm
  10. goto:eof
  11. -->
  12. <html >
  13. <font color=red><marquee>myzwd </marquee></font>
  14. </html>
复制代码
其实可以把bat放到html的注释里面,html的注释符号是<!-- 啊啊啊啊-->,dos 的标准注释是rem,顺便指出,符号“::”人们也常拿来注释,但是你试一下,在for里面用会报错的其实"::"这种符号与 ":a 123jk" 是一回事,它应该是子程序的记号。我觉得bat里面还是要尽量用标准的写法l。反过来也可以把html代码放到bat的注释里面。
但这种做法完全是多余的。比如上面这中写法在网页上就多出一个:号。正规的网页多一个冒号也是不可以的。

还有就是html代码码很长,以我编辑网页的经验的话,乱放是很麻烦的事情。加载代码和加载js,vb脚本是一回事情,因为这只不过是在<html>...</html>间再插入代码吧了。

问题:我一直没找到 %~s1 和%~f1的差别在那里,我每次混用给我的感觉都一样,差别在那呢?
  1. @echo off
  2. echo 另类循环 骗骗你让你最后成为死循环 你运行3次试一试
  3. :one
  4. echo I LOVE YOU HOME OF BATCH
  5. set /a n+=1
  6. if %n%==20 goto end
  7. if errorlevel 10 goto one
  8. exit /b 10
  9. :end
  10. echo 循环次数%n%次
复制代码

[ 本帖最后由 myzwd 于 2009-3-12 23:10 编辑 ]

TOP

问题:说真的我根本不知道这个符号是怎么打出来的---退格符号

edit==><ctrl>+p==>退格符
for /f "delims=" %%a in ('%0') do (echo %%a)

TOP

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

call控制时间做动画,比较好

  1. @echo off
  2. rem call 运行比for慢,控制时间 动画
  3. color 0c
  4. for /l %%1 in (1 1 5) do (
  5. for /l %%2 in (1 1 100) do (call echo %time%>nul )
  6. call set tt= ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■  
  7. call echo %%tt%%
  8. )
  9. for /l %%1 in (1 1 5) do (
  10. for /l %%2 in (1 1 100) do (call echo %time%>nul )
  11. call set tt= ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■  
  12. call set tt=  %%tt:~2%%
  13. echo.
  14. call echo %%tt%%
  15. )
  16. for /l %%1 in (1 1 5) do (
  17. for /l %%2 in (1 1 100) do (call echo %time%>nul )
  18. call set tt= ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■  
  19. call set tt=      %%tt:~7%%
  20. echo.
  21. call echo %%tt%%
  22. )
复制代码
call比for慢 这个特性刚好可以做动画的时间控制
  1. @echo off
  2. color 0c
  3. echo  ---call和ping控制时间的动画效果对比
  4. echo ----ping
  5. for /l %%i in (1 1 5) do (
  6.   set tt=■■■■■■■■■■
  7.   ping -n 2 localhost >nul
  8.   echo %tt%
  9. )
  10. echo ---call
  11. for /l %%i in (1 1 5) do (
  12.   set tt=■■■■■■■■■■
  13.   for /l %%1 in (1 1 100) do (call echo %time%>nul)
  14.   echo %tt%
  15. )
  16. echo ---显见call控制时间具有更大的自由度,特别是ping闪烁的光标要处理
复制代码

call取值100大概等于ping取2的速度

[ 本帖最后由 myzwd 于 2009-3-7 19:57 编辑 ]

TOP

回复 6楼 的帖子

谢谢 我按你的方法成功了。非常谢谢。

TOP

dos里面居然可以有遮罩---妙

  1. @echo off
  2. echo  ---认识退格键  ""
  3. echo     中国人民解放军WS
  4. echo     中国人民解放军WS
  5. echo     中国人民解放军WS
  6. echo     中国人民解放军WS
  7. echo     中国人民解放军WS
  8. echo     中国人民解放军WS
  9. echo     中国人民解放军WS
  10. echo     中国人民解放军WS
  11. echo     中国人民解放军WS
  12. echo     中国人民解放军WS
  13. echo     中国人民解放军WS
  14. echo ---退格符就是一辆车走的路程,原有的字符就是一条路,
  15. echo     退格符后面的字符就是车,车过了,路还是路。
  16. echo     有的高手把退格符叫---挖土机,形象吧。
  17. echo ********************************
  18. echo ---动画演示退格符-■---
  19. echo *********************************
  20. for /l %%j in (1 1 100) do (call echo %time%>nul)
  21. color 0c
  22. set bs=
  23. for /l %%i in (1 1 10) do (
  24.     for /l %%j in (1 1 200) do (call echo %time%>nul)
  25.     call set bb=%%bs:~%%i%%
  26.     call set tt= 中国人民解放军万岁%%bb%%■人民英雄永锤不朽
  27.     call echo %%tt%%
  28. )
  29. echo 多象flash的遮罩,不过遮罩是遮住的显示,没遮住的不显示,
  30. echo  这里刚好与flash的遮罩功能相反
复制代码
  1. @echo off
  2. echo ----退格符应用动画---逐渐显示小方块
  3. color 0c
  4. set bs=
  5. for /l %%i in (1 1 120) do (
  6.   set bs=■%bs%■
  7.   for /l %%1 in (1 1 100) do (call echo %time%>nul)
  8.   call set /p=%%bs%%<nul
  9. )
  10. echo --------------
  11. set bs=
  12. for /l %%i in (1 1 200) do (
  13.   set bs=%bs%■
  14.   for /l %%1 in (1 1 100) do (call echo %time%>nul)
  15.   call set /p=%%bs%%<nul
  16. )
复制代码
上述两段程序只有一字之差,确显示出完全不同的效果。“set bs=■%bs%■ 和set bs=%bs%■”
  1. @echo off
  2. color 0c
  3. set bs=
  4. for /l %%i in (1 1 10) do (
  5.   set bs=%bs%■
  6.   for /l %%1 in (1 1 100) do (call echo %time%>nul)
  7.   call echo %%bs%%
  8. )
复制代码
程序分析:一切都是nul再作怪。把前面的程序最后一句改成这样:call echo %%bs%%,将得到靠左面的一列
小方块。因为迭代变量是 “bs=方块 退格 方块”,退格后bs的值就只能是 永远是一个方块。


----------------两个迭代变量------------------------------
tt=%tt%123   --------结果是:123,123123,123123123.。。。。。。
tt=%tt%123 --------123,12123,1212123,121212123......
--------------两个迭代显示--------------------------------
echo  %tt%123
set/p=%tt%123<nul  
----------------------------迭代当然离不开循环了。

-------------------------------------如何在左面插入空格
  1. @echo off
  2. echo 在■ 的左面插入10个空格
  3. cls
  4. setlocal enabledelayedexpansion
  5. color 0c
  6. for /l %%i in (1 1 10) do (
  7. set tt=0!tt!
  8. )
  9. set tt=%tt%■
  10. set tt=%tt:0= %
  11. echo !tt!
复制代码
其实插入空格最好的办法是利用set变量
set space=     ----这样是不行的
set space=“ ” 这样还是不行的
要这样:
set "space=   "
要10个空格就循环吧
  1. for /l %%1 in (1 1 10) do (call set "space= %%space%%")
复制代码
  1. @echo off
  2. echo ---匀速向左运动,显示2个整行
  3. set tt=
  4. color 1d
  5. for /l %%i in (1 1 78) do (
  6.   for /l %%1 in (1 1 100) do (call echo %time%>nul)
  7.   set tt=■■
  8.   call set/p=%%tt%%<nul
  9. )
  10. echo.
  11. echo ---匀速向左运动,显示2个整行 英文
  12. set tt=
  13. color 1d
  14. set tt=
  15. for /l %%i in (1 1 158) do (
  16.   for /l %%1 in (1 1 50) do (call echo %time%>nul)
  17.   set tt=AA
  18.   call set/p=%%tt%%<nul
  19. )
  20. echo.  
  21. echo ---匀速向左运动,显示2个整行 中英文混合
  22. set tt=
  23. color 1d
  24. set tt=
  25. for /l %%i in (1 1 156) do (
  26.   for /l %%1 in (1 1 50) do (call echo %time%>nul)
  27.   set tt=A■
  28.   call set/p=%%tt%%<nul
  29. )
  30. echo.  
复制代码
  1. @echo off
  2. echo ---迷失的A
  3. set tt=
  4. color 1d
  5. set tt=
  6. for /l %%i in (1 1 115) do (
  7. for /l %%1 in (1 1 50) do (call echo %time%>nul)
  8. set tt=■A
  9. call set/p=%%tt%%<NUL
  10. )
  11. echo.
  12. echo ----
  13. set tt=
  14. color 1d
  15. set tt=
  16. for /l %%i in (1 1 120) do (
  17. for /l %%1 in (1 1 50) do (call echo %time%>nul)
  18. set tt=■A
  19. call set/p=%%tt%%<NUL
  20. )
复制代码
这的放法是个细节,要想成为整行,就在这里下功夫。循环终值=(40-1)*行数,英文 循环终值=(80-1)*行数
混合 循环终值=(80-2)*行数 迷失的A例外--循环终值=40*行数 或 循环终值=40*行数-1(显示A)
  1. @echo off
  2. echo ---居中显示
  3. color 1d
  4. set tt=
  5. set ss=
  6. for /l %%i in (1 1 16) do (
  7.   call set ss=%%ss%%0
  8. )
  9. call set ss=%%ss:0= %%
  10. call set /p=%%ss%%<nul
  11. for /l %%i in (1 1 21) do (
  12.   for /l %%1 in (1 1 50) do (call echo %time%>nul)
  13.   call set tt=■■
  14.   call set /p=%%tt%%<nul
  15. )
  16. echo.
复制代码
  1. @echo off
  2. echo ---退格符完成简易向右运动
  3. cls
  4. echo.&echo.&echo.
  5. color 1d
  6. set tt=
  7. set ss=
  8. set bs=
  9. for /l %%i in (1 1 78) do (
  10.   call set ss=%%ss%%0
  11. )
  12. set ss=%ss:0= %
  13. set /p=%ss%<nul
  14. for /l %%i in (1 1 15) do (
  15.   for /l %%1 in (1 1 100) do (call echo %time%>nul)
  16.   call set  bs=%%bs%%
  17.   call set tt=%%bs%%■
  18.   call set /p=%%tt%%<nul
  19. )
  20. echo.
  21. echo   原理是利用78个空格基本铺满第一行,给小方块留下2byte的位置,
  22. echo   利用退格符相当于是它后面字符走的路程的原里,让退格符逐渐增加,即字符的路程加大
  23. echo  这样就实现了反方向运动,为了好记忆我自己把退格符的这种性质叫退格符的--------
  24. echo  路程原理  ,如果退格符后面没字符,这个路程也就不起作用了
复制代码

[ 本帖最后由 myzwd 于 2009-3-9 16:19 编辑 ]

TOP

退格符

二点体会:
退格之后,处于改写状态,二个英文字符相当一个汉字。
在复合句中,call有延迟变量的功能。

TOP

很好的笔记,学习了!

TOP

回复 11楼 的帖子

一个汉字=2个英文字,但是从上面的实例可以看出,退一格就是一遮住一个字符,不管它是中文还是英文。
另外 关于call 的延迟性的理解,我个人认为可以理解得简单点,就是cmd在解释语句时,遇到call就会对程序再解释,以补充不足的数据,以完成数据匹配,最后实现对程序的执行,最终以,这样就实现了数据的动态变化。微软的bat是一个黑箱,想多了反而自找麻烦。呵呵

今天研究了本论坛两大高手的代码,觉得高手的代码就是不一样。长知识了。
  1. @echo off
  2. rem ----向右运动
  3. setlocal enabledelayedexpansion&color 1d
  4. for /l %%i in (40 -1 1) do (
  5.     for /l %%1 in (%%i ,-1,1) do (
  6.       set /p= <nul
  7.     )
  8.    
  9.     set /p=■<nul
  10.     for /l %%1 in (1 1 50) do (echo.>nul)
  11.     cls
  12. )
复制代码

[ 本帖最后由 myzwd 于 2009-3-9 15:37 编辑 ]

TOP

回ls

一个格退格符就向后退一个字符的位置,退格符后面的内容就从这个位置开始输出,并改写此位置后面的原有内容,二个英文字母改写一个汉字,没被改写的原样输出。难道你不认为是这样么?

TOP

只有二种方法能实现变量的延迟
1、setlocal enabledelayed
2、call
难道你不认为这样么?

TOP

返回列表