无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 17300|回复: 31
打印 上一主题 下一主题

DOS版块好冷清,发几个学习的批处理实例.欢迎DOS爱好者参入讨论

[复制链接]
跳转到指定楼层
1#
发表于 2008-8-12 23:58:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  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 编辑 ]
2#
 楼主| 发表于 2008-8-13 00:07:37 | 只看该作者
无事干改动一下,欢迎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 编辑 ]
回复

使用道具 举报

3#
 楼主| 发表于 2008-8-13 00:23:29 | 只看该作者
  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 编辑 ]
回复

使用道具 举报

4#
发表于 2008-8-13 05:49:35 | 只看该作者
唉,偶的DOS水平实在太差,勉强能看懂一些IMG文件中用到的批处理。
回复

使用道具 举报

5#
发表于 2008-8-13 08:48:54 | 只看该作者
我很喜歡,但是還沒有搞明白那些命令怎麼用的.
回复

使用道具 举报

6#
发表于 2008-8-13 09:12:09 | 只看该作者
欢迎楼主进行详细讲解,指导菜鸟领会批处理中的各句的意义。
回复

使用道具 举报

7#
 楼主| 发表于 2008-8-13 12:17:53 | 只看该作者
  1. 欢迎楼主进行详细讲解,指导菜鸟领会批处理中的各句的意义。
复制代码

在有时间条件情怳下可以搞个注释,
在lianjiang面前班门弄斧了,请多指教.
回复

使用道具 举报

8#
 楼主| 发表于 2008-8-13 13:40:16 | 只看该作者
在这里有于时间原因,先仅对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 编辑 ]
回复

使用道具 举报

9#
发表于 2008-8-14 00:36:50 | 只看该作者
多谢楼主,可以讲这样的详细,方便我等菜鸟学习,希望继续讲下去,让我等可以学到更多的命令用法啊!不过好像还没有到8月23日吧
回复

使用道具 举报

10#
 楼主| 发表于 2008-8-14 13:27:36 | 只看该作者
为便于理解FOR的工作流程
以下图为例:
for为1
(%str%)为2
%%i为3
DO以后括号里面第一个命令为4
第二个命令为5
到最后一个反括号)为至第一次循环结束,接着1-2-3-4-5第二次循环,类推至读取完2里面的最后一个内容并执行完,整个FOR任务完成.



[ 本帖最后由 haiou327 于 2008-8-14 13:43 编辑 ]
回复

使用道具 举报

11#
发表于 2008-8-15 10:53:55 | 只看该作者
一直没 明白这是什么意思, 现在学习了 非常感谢LZ
回复

使用道具 举报

12#
发表于 2008-11-23 17:08:18 | 只看该作者
学习了楼主的知识,了解楼主的用心
回复

使用道具 举报

13#
发表于 2008-12-14 15:16:59 | 只看该作者
DOS版块好冷清,都不愿意去研究了。
回复

使用道具 举报

14#
发表于 2009-4-10 22:14:57 | 只看该作者
呵呵,慢慢学习,期待着也能成为DOS高手
回复

使用道具 举报

15#
发表于 2009-8-12 09:23:29 | 只看该作者
哈哈,楼主真是好人啊 ...太详细了
回复

使用道具 举报

16#
发表于 2009-8-12 09:37:44 | 只看该作者
哈哈,楼主真是好人啊 ...太详细了
回复

使用道具 举报

17#
发表于 2009-8-19 17:28:25 | 只看该作者
我还是觉得DOS比较有趣
回复

使用道具 举报

18#
发表于 2009-9-15 01:47:15 | 只看该作者
感谢楼主为新手们做了好事。
回复

使用道具 举报

19#
发表于 2009-9-20 08:26:47 | 只看该作者
LZ有没有专门学习批处理的网站,我感觉批处理用起来挺方便的。
回复

使用道具 举报

20#
发表于 2009-11-17 22:30:55 | 只看该作者
讲的太好了,谢谢
回复

使用道具 举报

21#
发表于 2009-11-18 18:43:46 | 只看该作者
好贴子,认真拜读了。。。。
回复

使用道具 举报

22#
发表于 2009-11-18 18:52:42 | 只看该作者
不知可不可以把变量值赋予一个文件呢???
回复

使用道具 举报

23#
发表于 2009-11-18 18:53:11 | 只看该作者
也就是说变量值从一个文本文件读取呢?
回复

使用道具 举报

24#
发表于 2010-4-22 15:41:43 | 只看该作者
老帖,学习用得着。这几天在看批处理。呵呵。
回复

使用道具 举报

25#
发表于 2011-1-3 21:14:11 | 只看该作者
现在学习Dos的人越来越少了,可是我却认为学习了Dos才能真正理解计算机的原理,但是苦于没有好的指导者,啥都不懂,哎~~~希望此论坛能够解我心头之忧啊!
回复

使用道具 举报

26#
发表于 2011-3-3 17:43:00 | 只看该作者
谢谢楼主,这块正是我的弱项
回复

使用道具 举报

27#
发表于 2011-3-22 00:30:33 | 只看该作者
感受了DOS的强大!
回复

使用道具 举报

28#
发表于 2011-4-1 10:52:28 | 只看该作者
学业、游戏及工作都是从DOS开始,真教人怀念。
回复

使用道具 举报

29#
发表于 2011-4-5 13:16:50 | 只看该作者
非常感谢楼主,辛苦啦。
回复

使用道具 举报

30#
发表于 2011-4-20 06:56:21 | 只看该作者
看了楼主的帖子,我发现我什么都不会。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-29 20:03

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表