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

[原创] [连载]对批处理新人的若干建议(2009年8月9日更新)

&&本人结合论坛的特点就向批处理新人提出若干建议如下(由于时间问题,只能采用连载的形式,还请大家谅解):

一、如何学好批处理
      有很多新人开始时对于学习批处理是具有浓厚的兴趣的,但如痴如醉一番后却发现批处理原来不是这么简单好玩的,于是渐渐地丧失了学习的兴趣,这是为什么呢?我认为这是学习方法不对造成的,怎样才是正确的学习方法呢?本人认为可以总结归纳为八个字“多看多想多问多练”。也就是多看学习资料和别人的好代码,在看的时候加入自己的思考,多想想代码为什么要这么写?代码是不是还可以再改进一下?诸如此类的问题。当自己对某此问题想不通弄不明白时,你可以向别人请教,在得到满意的解释后,你还需要自己动手写写练练,做到举一返三。结合本论坛的特点,具体可分以下几步走:

1、首先得了解常用的dos命令,dos是批处理的基础,如果你对常用的dos命令都不了解的话,以后的学习你将会是举步维艰,自然会觉得索然无味,从而最终丧失学习的兴趣。在论坛中有大量的基础教程可以让你迅速了解这些知识,刚开始时你可以“不求甚解”,只要了解这个命令做什么的就可以了,如dir cd if for goto call等。

2、当你了解了常用的dos命令后,你就可以进入论坛的新手学习版块-新手练功区了。在新手练功区中有大量的新手练习题,这些题目都是版块版主为新人量身出台的,我建议大家多花点时间和精力,当然在一开始的时候,你也不必急着去做题,而是可以先看看别人的解答和版主的点评,再多思考思考,相信这对你的提高是非常有用的。当你持续“看和想”了一段时间后,你就可以着手去做做练习题了。当然在此期间如你对什么问题有不明之处,首先请在论坛中进行搜索(注意选好你的关键词),如搜索得不到你想要的信息,你大可在新手区和代码咨询发贴求助,相信你会很快得到你想要的知识和信息的。当你能完全一人独立做出新手区的所有题目后,恭喜你!你可以进阶了。但下面该往哪去?别急,往下看。

3、接下来,你试着回答我一个问题:批处理中最常用最复杂也是最强大的命令是哪个命令?相信经过以上两步的训练,你会脱口而出“for”。是的,for命令的确是批处理中最重要的命令,学好它的意义是不容置疑的。管理员就此命令特为大家精心撰写了for命令从入门到精通一贴,你所要做的就是前前后后将此贴通遍,将其搞懂弄明白,并结合大量的for命令练习,以熟练掌握for命令的各种应用。至此,我可以说你已经脱菜了。但是不是掌握了for命令就可以“天下无敌,无坚不摧了呢”?非也,接下来,你还要继续提升自己。

4、批处理代码从直观视觉上无非是一堆dos命令的组合排列,但如何找到最佳的排列组合就是我们所要解决的问题。也就是如何就某一问题或事件写出执行准确、效率最高、损耗最小、简洁通用的代码,但这可不是一天两天就能做到的,这需要经过长期的训练才能做到。论坛就有这个训练区-代码咨询&讨论版块。在这其中你可以就你的学习经验、技术心得、常遇问题跟大家做充分的交流和探讨。本人信奉一句格言:讨论出真知。任何理论的产生、提出、探索、论证、总结都是少不了讨论的。当然,你可别忘了在这一版块中也有大量的练习题。这些练习题有很多是紧扣实际应用来设置的,同时更有版主和参与者的注释说明,相信勤做习题会让你的批处理技术和水平得到很大的提高。个人建议一般不要进入版块的子版块-高手区,因为那里面的代码大多是复杂而难懂的,有可能你不但学不到什么东西,反而会对学习批处理产生畏惧。

5、当你在论坛学习了相当时日并觉得自身已经得到了很大提高后,你也可以尝试着去引导新人帮助他人。大家可以看到我的签名是“共同提高”,是的,只有大家高才是真的高。而你在尽心帮助别人的时候自身也会学到很多的东西,也会得到新的提高。如果你觉得自己的时间有相当富余,精力也充沛,还可申请加入论坛技术组甚至管理层,来更好地为大家提供帮助。

6、俗话说:学以致用。学了东西就要用,学习批处理不是用来向别人炫耀的(这本就没有什么值得炫耀的),而是要善用它来为我们的日常生活、学习、工作来带来便利。所以,你在论坛学习的批处理请不要留在论坛,你要把它带回家带到工作中去,以你无穷的智慧来发挥其无尽的作用。而当你在实际中遇到解决不了的困难,你就又要回到论坛来学习,只要你不断重复这种学习->实践再从实践->学习的过程,你对批的运用将会达到炉火纯青,得心应手的境界。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

二、怎样迅速解决想要解决的问题
    既然是新人(老手也不例外)在学习批处理的过程中就会碰到很多问题,每个人都想在遇到问题时就能迅速地将其解决掉。那么怎么样才能迅速而有效地解决你所面临的问题呢?这就要讲究方法了。我认为解决问题的方式无外乎下面两种:1、查阅资料 2、求助他人,下面就结合论坛的特点一一阐述:

  1、查阅资料
    首先还是请你就你的问题进行搜索,因为你所遇到的问题可能很多人都已经遇到过,在论坛上也有现成的解决方案。同时,你所要问的问题在别人眼里可能是很简单很基础的当你就这些问题求助他人时,开始时别人可能还会耐心帮你解决,但如果这样的问题已经被人问过N次,又被人回答过N次了呢?那么很少会有人再来解答你的问题了,更多的时候你得到的只有两个字“搜索”。本论坛对于批处理新人的信息需求来说几乎是要有尽有,所以只要你善于查阅,你总能获得你所要的信息。那么怎么样才能在论坛海量的资料信息中找到自己想要的呢?只有搜索。因为论坛是不可能将所有的信息资料都放到大家一眼都能看到的地方的,这时你就要掌握好搜索的方法了。大家都知道搜索是通过搜索某一关键词来完成的,所以选择好你的关键词是至关重要的。如:你在实际中遇到要提取文本中有用信息的问题,你就可以键入“提取 文本”的关键词,如果你对dos命令有一定的熟悉,你也可以键入“findstr”关键词。在这里有一点需要注意,你最好将搜索范围选择为“探索所有开放的版块”,这样你会获得更多的信息以供选择。同时,你也可在gogle baidu等上进行搜索。

    2、求助他人
    当你通过搜索未能解决自己的问题后,便只有求助于他人了。在本论坛求助又有两种方式,一种是在QQ上进行求助,你可以在论坛的三个QQ学习群中在线发问,也可以直接与某管理层私聊进行求助(建议一般不要采取这种方式)。另一种是在论坛发贴。我个人是提倡大家尽量使用第二种方式进行求助的。为什么?因为第一用QQ在线求助固然是一种最直接的方式,大家一起通过QQ平台来讨论和解决问题,多好啊。但大家想过没有,一般能为你解决问题的都是批处理老手甚至于技术层、管理层。但他们是不一定有时间24小时QQ在线的,也许你多次在线求助时,能解决你的问题的人都不在线,这时你的问题又找谁去解决呢?也许你会说:QQ群不是有群聊记录吗,我可以等啊?但你想想又有哪个管理人员有这样的时间和精力,来翻阅每天的群聊记录,找到那些要解决的问题,再一一回复呢?第二假如你的运气很好,问题一提出便得到了大家的响应,得到了有效的解决。这时你是高兴了,一口一个咱们群好我们论坛强。但你又知道不,也许你所提出的问题是很有代表性很有意义的,就这样在QQ上做了一次性的处理,只有当时在线的人或许能获得重要的知识,后来的人呢?总不能又去查群聊记录吧?所以我个人请大家在碰到问题搜索未果的情况下,到论坛发贴求助。一方面这是你对论坛建设的支持?另一方面本论坛的管理层都是认真负责(技术也是一流)的,在本论坛发出的求助贴总能在第一时间内得到有效回复。如不相信的话,你可以就一个问题同时在其他技术论坛和本论坛同时求助,你看看最先得到回应和解决的将会是哪个论坛(不好意思,小打了一次广告)。那么,是不是你在论坛一发贴,你的问题就能得到有效解决了呢?非也,第一你所提出的问题要是批处理和vbs能够解决的(因为本论坛主打研究的是批处理技术)。第二就涉及到一个很重要并要非常注意的事项:为了日常的管理及贴子日后的搜索,论坛出台了一整套关于发贴的规章制度,你在发贴前请务必熟悉这些制度。也许你会说:有这个必要搞得如此认真吗?的确是搞得认真了点,但请理解本论坛这也是为了维护绝大多数的会员的利益不得已而为之的。试想下,要是求助的人为了方便,贴子的标题内容能省则省,一律是“求助”二字的话,我前面讲到了搜索的重要性,那么后来的人遇到同样的问题,他又如何从无数的“求助贴”来搜索到能为他解答疑问的那篇贴子呢?所以你的求助贴应在标题中尽可能将你的问题概括清楚,否则,管理层会“无情”地将你的贴子锁掉,这时会通过站内短信第一时间通知你,如你收到这样的短信请自觉修改好标题并在回复中请求打开贴子。如你没有及时处理,那么下次你就只能在论坛回收站见到你的贴子了。在这里我还要提醒大家注意几个事项:

    1)一定要在贴中将你的问题描述清楚,因为别人不是神仙,不可能一切凭猜测和设想来为你解决问题,如贴中涉及到私密内容,请自行设法变通描述;

    2)切不可因为问题没有解决而重复发贴,这可是要“挨板子”的哦;

    3)如你的问题得到了解决,请给予帮助你的人以回复和肯定,千万不要吝啬那小小的加分;

    4)如你的问题有了变化,请在贴子顶楼予以更新,最好是注明下更新的时间,如你新的问题涉及到另外的方面,请重新开贴求助和讨论;

    5)注意你的文明用语,有可能别人在回贴时会给予你指责和批评,这时,他说的对的,请你虚心接受,说的不对的,权当耳边风了,毕竟论坛需要的是和谐的氛围,而这个是要大家来创造和维护的;

    6)建议在问题解决后对解决问题的过程进行记录和总结,如有可能写入贴中,一方面这是你提高自己的一种方法,另一方面无疑是为了方便后来人。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------更新时间2009年8月7日20:07

三、如何避免一些常犯的错误
    任何人在编写批处理代码时都有可能犯错,当然这些错误是有大有小有深有浅的,甚至于有些错误是不可避免的。俗话说的好嘛:失败是成功之母,很多人也就是在这一次次犯错中成长起来的。所以说我们在学习批处理的时候要不怕犯错,更要勇于犯错。但是话说回来,对于新手来说,所犯的错误通常是“低级错误”,是完全可以避免的。下面我就结合本人的经验来谈一谈,新人该怎样来避免低级错误的发生:

    1、养成良好的书写习惯
    大家知道批处理程序(且在这里称为程序)都是由基本的dos命令按一定的规则并依循编写者的意图组合在一起的。这些字符的组合是比较严谨的,一处写错就会导致整个程序不能正常运行。特别是复杂的批处理代码可以达到上千行之多,这就要求编写者在书写代码时,必须认认真真一个字符(包括空格)都不能写错,一旦写错将来花在查错的时间将远远超过编写的时间。大家想一想,这不是在时间和精力上的巨大浪费吗。下面就举几个新手在书写中常犯的错误来说明:

    1)多写、少写或错写字符:如将echo off写成了echooff(少了空格),将findstr写成了findestr(多写了e),将for写成了f0r(将o写成了0),像这类错误就要求新手将每个常用的dos命令书写形状都牢牢地“刻”在脑子里,要是觉得不够熟悉,平常没事多练练手。对了,建议大家都下个打字飞之类的软件来练习下打字水平,这对你学批是只会有好处的。

    2)在变量赋值时出错:有的新手可以会经常碰到这样的问题,明明我对a变量赋的值123(假设),为什么在结果中后面却多了个空格?其实问题就是出在书写写时后面多了个空格,这里我就教大家怎么避免再出现此类问题。如我们要设置str变量的值为yes,应该这样写:set "str=yes",用双引号将变量和值引起。当然,这样写也有不足之处,当变量值中含有奇数个"符时会出错,但这是一般都不会遇到的。

    3)在多重语句嵌套时不注意缩进和对齐:(可能超出了新人接受范围,不过本人觉得还是可以在这里说下):还是以例子来说明,大家看下面的代码:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,10) do (
  3. if %%a leq 3 (
  4. set /a num=3*%%a&echo !num!
  5. ) else (
  6. if %%a leq 6 (
  7. set /a num=6*%%a&echo !num!
  8. ) else (
  9. if %%a leq 9 (
  10. set /a num=9*%%a&echo !num!
  11. ) else (
  12. echo %%a
  13. )))
  14. pause>nul
复制代码
这段代码是不是看起来很漂亮,但实际上是不能运行的,那么错出在哪呢?相信很多人会要花费大量的时间来查找,其实,就是最后少了个")"。但如果我们是这样写:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /l %%a in (1,1,10) do (
  3.     if %%a leq 3 (
  4.        set /a num=3*%%a&echo !num!
  5.        ) else (
  6.        if %%a leq 6 (
  7.           set /a num=6*%%a&echo !num!
  8.           ) else (
  9.           if %%a leq 9 (
  10.              set /a num=9*%%a&echo !num!
  11.              ) else (
  12.              echo %%a
  13.           )
  14.        )
  15.     )
  16. pause>nul
复制代码
是不是一眼就能看出来三个if语句的括号是完整的(请注意它们上下的一一对应),但for语句就少了个括号。所以坚持缩进和对齐的写法一般是不会犯这样的错误的。

   4)将for中的变量符写错:有的新人接触变量是从set开始的,所以固定地认为变量只有%*%一种书写方式,于是在for语句中经常出现for /l %a% in (1,1,10) do ...这样的写法,大家记住for循环中的变量符是%%,实际上这涉及到批处理的预处理机制,因为在cmd中for中的变量符只有一个"%",在这里本人就不详细展开了。

   5)其他书写错误:由于情况复杂,就不一一讲述了,造成的原因只有一个就是书写习惯不正确,只要养成了良好的书写习惯,这些错误都是完全可以避免的。

   2、养成主动检查代码的习惯
   新手们学习批处理的代码热情高,更有自己编写代码的激情。很多新人在学习中突然有了好的思路,因为有了一定的基础,于是一口气将代码写了出来。然后,自己对着辛苦写出的代码左看右看,好有一番成就感。再一激动,想出个很棒的标题并发到论坛上去了。然后一心等着别人的回复,但别人马上跟贴:楼主,怎么运行不了啊?晕,马上自己检查,哈,原来是丢了个字符,小问题,改了再发,结果又是一片否定,再检查,晕,又是个小问题,改了再发,结果没人看了。所以大家想一想与其让别人发现你的问题,不如你自己刚开始就仔细检查核对清楚,对于实际操作类的,最好是自己成功运行了再发。讲了这么一大通,无非是讲的主动检查代码的重要性,那么怎么样检查自己的代码呢?如果发现不正常,又怎么样快速找到问题所在呢?我们不妨来探讨一下:

   1)其实也涉及到书写代码习惯的问题,那就是在编写代码,特别是较复杂的代码时,最好对代码进行分段标注,注明局部代码的功能和作用。注释代码有两种常用的方法,下面一一以例示之:
  1. @echo off
  2. echo 本代码实现的是在一行内以空格格开显示1-10的数字功能:
  3. for /l %%a in (1,1,10) do set /p=%%a <nul
  4. pause>nul
复制代码
echo方法是适合来做学习笔记的,即在代码运行的同时,附以说明。另一种方法可以用rem 也可以用:: ,下面是示例:
  1. @echo off
  2. rem 关闭回显,同时用@来屏蔽显示echo off命令本身
  3. for /l %%a in (1,1,10) do set /p=%%a <nul
  4. :: set /p=*<nul是不换行输出方法
  5. pause>nul
复制代码
可以用rem 方法和:: 方法对批处理代码进行逐行注释,但请在注释尽量另起一行,为什么?自己可以试。当你对代码进行注释后,在运行中出问题时,你能很快找到问题所在。

   2)cmd中运行批处理找错法 批处理编写完成后,只要双击就可以运行的,但如果碰到代码中有错误,一般系统都会给出错误提示。但很多情况下批只是一闪就没了,我们根本无法看到错误提示,这时怎么办?其实只要你在cmd中运行一下你的批就能看到错误提示了,如在cmd中键入a.bat,它就会自动运行当前目录下的a.bat,注意这里提到的是当前目录,那么怎么在当前目录快速进行cmd呢?在这里教大家一招,在当前目录新建cmds.bat(名字自己取,但不要与系统程序同名),内容如下:
  1. call cmd
复制代码
双击就在当前目录进入cmd了。转回我们的话题,这时你就基本就能依据错误提示来检查代码了。这时要注意的是,你最好将代码的屏显打开,也就是去掉@echo off这句。这样你就能看到整个代码的运行情况了。但我认为这不是最好的查错方法,大家继续往下走,下面我要讲解的是逐句pause查错法。

   3)逐句pause查错法 大家都知道pause命令可以让当前程序暂停执行,于是我们就利用它这一特性,给问题代码逐句加上pause(&pause或另起一行),然后反复运行程序,这样就能很方便地找出错误所在了。当然这种情况,你起码要对代码的每句所起到的功能以及运行结果有所了解。对于新手而言,对代码做注释的重要性无疑在这里得到了再次的强调。

   3、灵活运用切勿生搬硬套 有的新手喜欢照抄别人的代码(特别是伸手党),在得到一个好代码后,不去深入分析研究消化吸收,而是遇到相同情况就将代码拿出来用,结果往往是闹出了大笑话。其实,世上没有万能的代码,针对一类问题是不会有绝对通用的代码的。具体问题总是要具体分析的,本人在平时遇到问题都是现写现用的。当然新手可能达不到这个水平,但你得到好的代码后,你至少应该深入剖析下作者的思路(个人认为这是学批很重要的一点),学习下代码的编写技巧。遇到不明白的地方,多看看资料和多向人请教,一定要将代码吃透吃准。同时,自己要依照代码总体结构重新编写数次,有可能你就会发现其中的不足而得到新的提高。这样下次再碰到类似的问题,你就能灵活运用得心应手了。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------更新时间2009年8月9日22:21

[ 本帖最后由 batman 于 2009-8-10 09:03 编辑 ]
6

评分人数

    • for..bat: 多年后才看到,依然感觉很好技术 + 1
    • unknown_world: 很好的文章,对于新手能做到以上说,进入了 ...技术 + 1
    • Hello123World: 可谓是新手入门必读PB + 6 技术 + 1
    • januapr: 感谢batman对新手的指导!PB + 2
    • lixiaodaoaaa: batman辛苦了!多么负责!!PB + 3
***共同提高***

回复 1楼 的帖子

不得不顶,就算管理员将我列入纯灌水之类并加以扣分我还是要顶……用心良苦啊……
Still with wax

TOP

我想,新手指引的教程已经多的不可数了,但是处于中段想进入高手行列的教程或者指引反而没有。。。
第三方命令行工具编程
Http://Hi.Baidu.Com/Console_App

TOP

一般学习一个新的东西,尤其是自己特别感兴趣的内容,我一般都是开始猛翻资料,不管懂不懂,全看不误。而后休息一下,看看那些机会可以用到这些,试着艰难的解决一些简单问题。当遇到实际问题的时候,再来烦资料,或者请教他人,慢慢的,循序渐进吧,一定要从实际中来,到理论中去,再回到实际中,循环往复。
胡乱说了两句,不知道清楚不清楚,呵呵

TOP

看了LZ一番话,惊醒我这梦中人啊,我要坚定信念,好好学习批处理和打字方式了~

TOP

每天学一点~今天要比昨天学多一点~谢谢教导

TOP

...很难但是很有趣

TOP

谢谢楼主给我们新手指明方向

TOP

收到收到 一定努力

TOP

顶!深有体味,现在正学已至用。

TOP

确实如楼主所说,我也是因为遇上一些问题再用上批处理这个东西的,现在觉得有些兴趣所以才来论坛中学习得,

TOP

谢谢楼主哈,我要好好学习BAT

TOP

顶楼主
为我们这些新手指明了方向
谢.....

TOP

对于我这样的新手确实有很大的帮助。谢谢楼主的分享。楼主写这么多用心良苦,我一定好好学习。

TOP

请教批处理复合判断文件是否存在

怪事,居然找不到发贴的地方。
if not exist \\192.168.1.254\share$\xxx.txt &::判断这个文件不存在就执行下面判断否则不执行下面命令
if exist c:\windows\system32\cjl.exe &::如果存在此文件则运行

哪位大虾帮下忙,上面的批处理该怎么写?

TOP

返回列表