无忧启动论坛

标题: DOS版块好冷清,发几个学习的批处理实例.欢迎DOS爱好者参入讨论 [打印本页]

作者: haiou327    时间: 2008-8-12 23:58
标题: DOS版块好冷清,发几个学习的批处理实例.欢迎DOS爱好者参入讨论
  1. @echo off
  2. color fc
  3. setlocal enabledelayedexpansion
  4. set str=一二三四五 上山打老虎 老虎打不到 打到小松鼠 松鼠有几个 让我数一数  数来又数去 五四三二一 一二三四五
  5. for %%i in (%str%) do (
  6. echo %%i&echo.&ping -n 2 127.1>nul
  7.                        )
  8. pause>nul
复制代码

[ 本帖最后由 haiou327 于 2008-8-13 14:25 编辑 ]
作者: haiou327    时间: 2008-8-13 00:07
无事干改动一下,欢迎DOS爱好者参入讨论
  1. @echo off
  2. color fc
  3. setlocal enabledelayedexpansion
  4. set str=一二三四五 上山打老虎 老虎打不到 打到小松鼠 松鼠有几个 让我数一数 数来又数去 五四三二一 一二三四五
  5. echo.&echo.
  6. for %%i in (%str%) do (
  7. set char=%%i
  8. for /l %%j in (0 1 5) do (set/p=!char:~%%j,1!<nul&ping -n 2 127.1>nul
  9.              ))
  10. pause>nul
复制代码
再来稍作修改一下,帮助理解FOR的应用  循环十遍
  1. @echo off
  2. color fc
  3. setlocal enabledelayedexpansion
  4. echo.
  5. set str=一二三四五 上山打老虎 老虎打不到 打到小松鼠 松鼠有几个 让我来数数 数来又数去 五四三二一 一二三四五
  6. for /l %%j in (1 1 10) do (for /l %%h in (1 1 1) do (for %%i in (%str%) do (
  7. set/p=%%i<nul&ping /n 2 127.1>nul
  8.                       ))
  9. echo.&echo.&echo.
  10.                )
  11. pause>nul
复制代码

[ 本帖最后由 haiou327 于 2008-8-14 15:26 编辑 ]
作者: haiou327    时间: 2008-8-13 00:23
  1. @echo off
  2. color f0
  3. setlocal enabledelayedexpansion
  4. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
  5. set a=-<nul
  6. set b=<nul
  7. set c=">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"<nul
  8. for /l %%i in (0,1,78) do set/p =!a!<nul&ping /n 0 127.1>nul
  9. for /l %%j in (0,1,78) do set/p =!b!<nul
  10. for /l %%k in (0,1,79) do set/p =!c:~%%k,1!<nul&ping /n 0 127.1>nul
  11. pause>nul
复制代码
晚上搞了几次,把-换成= 一直不成功,这样看起来模拟开机进度条效果更加逼真.SET =后面不支持等号字符串,看来得用其它特殊字符替换了.

终于算是比较好的方法解决了.作了如下修改,把-换成了 ,字符串的循环次数减少到38,如果观察仔细的话,和>仅相差一个字符的位置.
  1. @echo off
  2. color f0
  3. setlocal enabledelayedexpansion
  4. echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.&echo.
  5. set a=═<nul
  6. set b=<nul
  7. set c=">"<nul
  8. for /l %%i in (0,1,38) do set/p =!a!<nul&ping /n 0 127.1>nul
  9. for /l %%j in (0,1,78) do set/p =!b!<nul
  10. for /l %%k in (0,1,78) do set/p =!c1!<nul&ping /n 0 127.1>nul
  11. pause>nul
复制代码

[ 本帖最后由 haiou327 于 2008-8-14 15:33 编辑 ]
作者: 一只旋转的陀螺    时间: 2008-8-13 05:49
唉,偶的DOS水平实在太差,勉强能看懂一些IMG文件中用到的批处理。
作者: liumingqing    时间: 2008-8-13 08:48
我很喜歡,但是還沒有搞明白那些命令怎麼用的.
作者: lianjiang    时间: 2008-8-13 09:12
欢迎楼主进行详细讲解,指导菜鸟领会批处理中的各句的意义。
作者: haiou327    时间: 2008-8-13 12:17
  1. 欢迎楼主进行详细讲解,指导菜鸟领会批处理中的各句的意义。
复制代码

在有时间条件情怳下可以搞个注释,
在lianjiang面前班门弄斧了,请多指教.
作者: haiou327    时间: 2008-8-13 13:40
在这里有于时间原因,先仅对1楼帖子作个简单的注释讲解,希望能对DOS爱好者有所帮助
  1. @echo off
  2. color fc
  3. setlocal enabledelayedexpansion
  4. set str=一二三四五 上山打老虎 老虎打不到 打到小松鼠 松鼠有几个 让我数一数  数来又数去

  5. 五四三二一 一二三四五
  6. for %%i in (%str%) do (
  7. echo %%i&echo.&ping -n 2 127.1>nul
  8. )
  9. pause>nul
复制代码
@echo off
:: 注释 这句不用注释了吧,关闭CMD命令回显,@是不显示echo off本句,因为echo off并不能关闭

自身.

color fc
:: 注释 这句是指定控制台输出的颜色属性,第一个F为背景色为亮白色,第二个C为前景色为淡红色

setlocal enabledelayedexpansion
:: 注释 这句是开启变量延迟,在本例中可以省略不用,不影响效果.

set str=一二三四五 上山打老虎 老虎打不到 打到小松鼠 松鼠有几个 让我数一数  数来又数去

五四三二一 一二三四五
:: 注释 这句是把一二三四五 上山打老虎......这几45个字符串赋予str,注意中间有空格  

        隔开的

       最麻烦是下面这句FOR,先要全局看一下,从FOR开始,到DO以后被圆括号括起来的,作为一个动作来处理

      ,我们可以理解为是一段话,只不过里面有多个语句组成的.为了便于大家理解,在这里把他整句分开几部分来讲.DO前IN后,FOR后, DO后,三个部分

for %%i in (%str%) do (
:: 注释 这句是从DO前IN 后圆括号读取变量%str%的值,前面我们已经赋予STR=一二三四五 上山打

           老虎......"45个字符串了,也就是说%str%就是这45个字符串"一二三四五 上山打

           虎......",因为中间用空格隔开了,所以就分先后读取,先读取第一个空格前的第一句,也就是"一二

          三四五"了,并传递给前面的FOR赋予%%i,到此时%%i变成了"一二三四五"再送给后面DO来执行.

echo %%i&echo.&ping -n 2 127.1>nul
)

:: 注释 这句前面已经讲到FOR已经赋予%%i为"一二三四五"了,那么就是并ECHO出来,也就是并把%%i显示出来,那么ECHO执行


果就是在CMD窗口信息显示出"一二三四五"了,&echo.这句里&是一个组合命令符,显示前面结果之后,再执行&以后的命令,ECH

O.就换行的意思,&ping -n 2 127.1>nul)这句里-n是PING的参数,请求发出的信息得到响应, 2为PING的次数,127.1就是12

7.0.0.1的缩写法,PING本机,>nul 就是把PING出的结果重定向到一个空设备上,意思就是不要在CMD窗口显示.PING这一整句用到

这里整句意思就是在前面显示%%i结果后,停留两秒钟的时间(一个大致时间),如果PING的次数为3,就是显示%%i,此时为"一

三四五"了,显示3秒钟的时间,后面还有一个反圆括号,到此时第一个循环结束,再第二次循环开始,读取%str%字符串第

部分即第一个空格右边部分到第二空格之间"上山打老虎"这五个字,传递给FOR赋予%%i,此时%%i就变为"上山打老虎"了,

不再是"一二三四五"了,再送给DO来执行,ECHO显示出来停留2秒的时间,再开始第三次循环......直到读取最后一句也是"一二

三四五",并不是第一句的"一二三四五",要区分开来,送给DO执行显示出来停留2秒时间到后面一个反括号,至此FOR整个递

归循环过程结束,(反圆括号和前面的正圆括号是配合使用的不能缺少,否则批处理出错不能执行)继续执行最后反圆括号后面的命令

pause>nul
:: 注释 这句最简单,大家都知道pause是暂停的意思,用在句尾这里是让批处理执行完停留下来,让大家能够看得更加清楚,用>NUL就是不让请按任意键退出显示在窗口上,看起来让批处理执行窗口干净整齐一些.
                                                                                                                                                      bbs.wuyou.net
                                                                                                                                                    haiou327&YY写写
                                                                                     2008年08月13日中午


好了,就到这里吧,有错误纰漏之处请指正,希望能对DOS爱好者有所帮助!

                              
                                                                                   


如再不清楚之处请移步
无忧论坛CMD高级教程帖

[ 本帖最后由 haiou327 于 2008-8-14 12:00 编辑 ]
作者: hnbipd    时间: 2008-8-14 00:36
多谢楼主,可以讲这样的详细,方便我等菜鸟学习,希望继续讲下去,让我等可以学到更多的命令用法啊!不过好像还没有到8月23日吧
作者: haiou327    时间: 2008-8-14 13:27
为便于理解FOR的工作流程
以下图为例:
for为1
(%str%)为2
%%i为3
DO以后括号里面第一个命令为4
第二个命令为5
到最后一个反括号)为至第一次循环结束,接着1-2-3-4-5第二次循环,类推至读取完2里面的最后一个内容并执行完,整个FOR任务完成.



[ 本帖最后由 haiou327 于 2008-8-14 13:43 编辑 ]
作者: 360012450    时间: 2008-8-15 10:53
一直没 明白这是什么意思, 现在学习了 非常感谢LZ
作者: lisong    时间: 2008-11-23 17:08
学习了楼主的知识,了解楼主的用心
作者: czswuyou    时间: 2008-12-14 15:16
DOS版块好冷清,都不愿意去研究了。
作者: sgssgs    时间: 2009-4-10 22:14
呵呵,慢慢学习,期待着也能成为DOS高手
作者: hnxtddd    时间: 2009-8-12 09:23
哈哈,楼主真是好人啊 ...太详细了
作者: hnxtddd    时间: 2009-8-12 09:37
哈哈,楼主真是好人啊 ...太详细了
作者: liwei12345    时间: 2009-8-19 17:28
我还是觉得DOS比较有趣
作者: lqyna    时间: 2009-9-15 01:47
感谢楼主为新手们做了好事。
作者: 青风    时间: 2009-9-20 08:26
LZ有没有专门学习批处理的网站,我感觉批处理用起来挺方便的。
作者: fzdy108    时间: 2009-11-17 22:30
讲的太好了,谢谢
作者: wwwcccyyy    时间: 2009-11-18 18:43
好贴子,认真拜读了。。。。
作者: wwwcccyyy    时间: 2009-11-18 18:52
不知可不可以把变量值赋予一个文件呢???
作者: wwwcccyyy    时间: 2009-11-18 18:53
也就是说变量值从一个文本文件读取呢?
作者: allhigh    时间: 2010-4-22 15:41
老帖,学习用得着。这几天在看批处理。呵呵。
作者: 2010wenmin92    时间: 2011-1-3 21:14
现在学习Dos的人越来越少了,可是我却认为学习了Dos才能真正理解计算机的原理,但是苦于没有好的指导者,啥都不懂,哎~~~希望此论坛能够解我心头之忧啊!
作者: 2011zhangjian    时间: 2011-3-3 17:43
谢谢楼主,这块正是我的弱项
作者: zery    时间: 2011-3-22 00:30
感受了DOS的强大!
作者: 2011hobbya    时间: 2011-4-1 10:52
学业、游戏及工作都是从DOS开始,真教人怀念。
作者: 2011benhack    时间: 2011-4-5 13:16
非常感谢楼主,辛苦啦。
作者: lizp2020    时间: 2011-4-20 06:56
看了楼主的帖子,我发现我什么都不会。
作者: 2011emu    时间: 2011-4-20 09:27
这个贴子可以学习一下。
作者: 2011198976    时间: 2011-4-22 08:39
楼主您太伟大了!讲解的真详细受教啦!




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3