中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [讨论]批处理脚本和程序设计语言的比较
« [1] [2] »
作者:
标题: [讨论]批处理脚本和程序设计语言的比较 上一主题 | 下一主题
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『楼 主』:  [讨论]批处理脚本和程序设计语言的比较


  学习批处理已经有一段时间了,感觉批处理脚本和很多程序设计语言有很多地方是相通的,特别是在算法上更是相通。把其它程序设计语言的算法拿到批处理里面来同样适用,当然只是算法上是类同的道理,实际语句就不一样了。  ^_^

  就我个人感觉,批处理脚本和其它程序设计语言有以下方面是相通的(和大家熟悉的C语言比较吧):
---------------------------------------  
  • 变量的赋值
      批处理里面可以用set命令来赋值,而C语言里面是类似"int a=1"这样来赋值的。
      
  • 判断语句
      批处理里面可以用if来判断,同样,C语言里面也是用if。
      
  • 循环语句
      批处理脚本里面可以用for来实现循环功能(当然,要在批处理里实现循环还有其它的很多方法~),这和C里面的for大同小异。
      
  • 输入语句
      C语言里面可以用"Scanf()"函数来实现输入操作,而在批处理里面就可以用"set /p a="来替代了。
      
  • 输出语句
      C语言里面可以用"Printf()"函数来实现输出操作,在批处理里面就可以用一个简单的"echo"语句来完成了。
      
  • 函数
      C语言里面可以调用函数来直接完成一些任务,我觉得批处理里面的"call"和"goto"命令结合上标签之后,就相当于是一个"函数"了。可以先用批处理把要实现的功能写好,然后把代码保存在.bat文件或者.cmd文件里面,或者直接放在要调用它的批处理脚本里面,然后用"call"或者"goto"调用它就可以了,这就不相当于一个函数了么? =_=
      
  • 参数
      C语言里面有参数,批处理文件和命令同样可以接受各种参数。
      
  • 算法
      很多算法都是相通的。
    ---------------------------------------



      以上只是个人愚见,由于经验以及各方面的原因,难免会有疏漏和错误的地方,欢迎大家来讨论、批评、指正。如果还有其它方面的相通点我没有提到的,大家可以发帖来讨论,我会完善原文的内容的。

      可能有的朋友会认为,一个是脚本,一个是程序设计语言,两者没法比较,而我写这个文章的目的就是使大家对批处理有一个更新的认识,仅此而已。


    [ Last edited by lxmxn on 2006-11-16 at 03:34 AM ]

       此帖被 +3 点积分      点击查看详情   
    评分人:【 redtek 分数: +3  时间:2006-11-16 03:35


  • 2006-11-16 03:33
    查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
    electronixtar
    铂金会员





    积分 7493
    发帖 2672
    注册 2005-9-2
    状态 离线
    『第 2 楼』:  



      Quote:
    函数
      C语言里面可以调用函数来直接完成一些任务,我觉得批处理里面的"call"和"goto"命令结合上标签之后,就相当于是一个"函数"了。可以先用批处理把要实现的功能写好,然后把代码保存在.bat文件或者.cmd文件里面,或者直接放在要调用它的批处理脚本里面,然后用"call"或者"goto"调用它就可以了,这就不相当于一个函数了么? =_=

    个人认为这只是一个 sub,即过程。 函数要返回值的。而 Goto 只能通过一个公共变量来交换值




    C:\>BLOG http://initiative.yo2.cn/
    C:\>hh.exe ntcmds.chm::/ntcmds.htm
    C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
    2006-11-16 03:39
    查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
    lxmxn
    版主




    积分 11386
    发帖 4938
    注册 2006-7-23
    状态 离线
    『第 3 楼』:  



      Quote:
    个人认为这只是一个 sub,即过程。 函数要返回值的。而 Goto 只能通过一个公共变量来交换值

      恩,还是有很多区别的,不过大体功能就是那样,都可以被调用来实现一些功能。


    2006-11-16 03:48
    查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
    vkill
    金牌会员





    积分 4103
    发帖 1744
    注册 2006-1-20
    来自 甘肃.临泽
    状态 离线
    『第 4 楼』:  

    都大同小易,只不过命令不同

    2006-11-16 04:11
    查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
    anakin
    新手上路




    积分 1
    发帖 4
    注册 2006-10-12
    状态 离线
    『第 5 楼』:  

    不错.....都大同小异

    2006-11-20 04:40
    查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
    kxows
    初级用户





    积分 31
    发帖 11
    注册 2006-11-7
    状态 离线
    『第 6 楼』:  

    有同感

    2006-11-20 05:53
    查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
    hxuan999
    中级用户

    DOS之日


    积分 337
    发帖 161
    注册 2006-11-4
    状态 离线
    『第 7 楼』:  

    不错呀,应该写出代码来对比一下.



    for /f %%h in (`echo hxuan`) do for /f %%x in (`echo hxuan`) do if %%h==%%x nul
    2006-11-23 07:38
    查看资料  发送邮件  发短消息 网志  OICQ (33899867)  编辑帖子  回复  引用回复
    yunlin
    新手上路





    积分 5
    发帖 7
    注册 2006-11-25
    状态 离线
    『第 8 楼』:  

    看不懂
    第一次来
    新手来着  
    顶你了   老公

    2006-11-25 15:48
    查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
    kaidi
    新手上路





    积分 16
    发帖 8
    注册 2006-11-4
    状态 离线
    『第 9 楼』:  

    学习学习再学习

    2007-1-27 11:02
    查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
    ccwan
    金牌会员




    积分 2725
    发帖 1160
    注册 2006-9-23
    来自 河北廊坊
    状态 离线
    『第 10 楼』:  

    我比较赞同楼主的意见,计算机语言是有很多相通之处的。

    对于7楼要求写出代码作为例子,我这里分别给出C语言和批处理的一个例子,很能说明问题。
    题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
    C语言代码:
    #include "stdio.h"
    #include "conio.h"
    main()
    {
      int i,j,k;
      printf("\n");
      for(i=1;i<5;i++) /*以下为三重循环*/
        for(j=1;j<5;j++)
          for (k=1;k<5;k++)
          {
            if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
            printf("%d,%d,%d\n",i,j,k);
          }
    }
    批处理代码:
    @echo off
    cd.>test.txt
    for /l %%i in (1 1 4) do (
       for /l %%j in (1 1 4) do (
           for /l %%k in (1 1 4) do (
                 if not "%%i"=="%%j" if not "%%j"=="%%k" if not "%%i"=="%%k" echo %%i%%j%%k>>test.txt&set/a num+=1
           )
       )
    )
    echo 共能组成%num%个互不相同且无重复数字的三位数>>test.txt
    start notepad.exe test.txt
    上例不难看出,解题思路一样,甚至代码都很相似 。

       此帖被 +9 点积分       点击查看详情   
    评分人:【 redtek 分数: +9  时间:2007-1-27 21:27




    三人行,必有吾师焉。   学然后知不足,教然后知困,然后能自强也。
    2007-1-27 21:23
    查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
    TLang
    初级用户

    Alpha



    积分 46
    发帖 21
    注册 2007-1-27
    状态 离线
    『第 11 楼』:  批处理能运算么?!!

    批处理能运算么?!!



    Impossible's Nothing!
    2007-1-27 22:48
    查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
    zh159
    金牌会员




    积分 3687
    发帖 1467
    注册 2005-8-8
    状态 离线
    『第 12 楼』:  



      Quote:
    Originally posted by TLang at 2007-1-27 09:48:
    批处理能运算么?!!

    set /a

    当然,有一定的限制

    2007-1-27 22:52
    查看资料  发短消息 网志   编辑帖子  回复  引用回复
    TLang
    初级用户

    Alpha



    积分 46
    发帖 21
    注册 2007-1-27
    状态 离线
    『第 13 楼』:  



      Quote:
    Originally posted by zh159 at 2007-1-27 09:52:

    set /a

    当然,有一定的限制

    是,只是基本的运算

    IF语句也比较简易

    ……

    总之个人感觉WinXPSP2时代,虽然对命令行命令以及批处理命令有了很大扩展,但是都还是比较简易,基础的~~



    Impossible's Nothing!
    2007-1-27 23:27
    查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
    lxmxn
    版主




    积分 11386
    发帖 4938
    注册 2006-7-23
    状态 离线
    『第 14 楼』:  



      Quote:
    Originally posted by TLang at 2007-1-27 10:27:


    是,只是基本的运算

    IF语句也比较简易

    ……

    总之个人感觉WinXPSP2时代,虽然对命令行命令以及批处理命令有了很大扩展,但是都还是比较简 ...


      呵呵,毕竟它是个脚本嘛,哪有高级语言那么多的函数可供你直接用呢?


    2007-1-28 11:55
    查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
    redtek
    金牌会员





    积分 2902
    发帖 1147
    注册 2006-9-21
    状态 离线
    『第 15 楼』:  

    大炮、导弹、冲锋枪……在战争中缺了谁都不行,它们各有所长,它们将实用在战争中的每一个需要发挥它们特长的地方~:)

    对于枪,我一辈子也可能摸不到或是用不到(当然也买不到,哈哈)。但是它对某些人来说失去它就等于失去了宝贵的生命~:)

    把最适合或是适合用在某些环境的工具或是脚本或是某种语言,并尽可能让它们物尽所长,就是艺术~:)


    (个人瞎说,权当玩笑,虽然还是梦想着能有一把枪~:)



        Redtek,一个永远在网上流浪的人……

    _.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
    2007-1-29 01:04
    查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
    « [1] [2] »
    请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


    可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



    论坛跳转: