Board logo

标题: [原创] 批处理之家VBS系列教程——第二节 第一个程序“Hello World!” [打印本页]

作者: rat    时间: 2008-11-5 02:28     标题: 批处理之家VBS系列教程——第二节 第一个程序“Hello World!”

批处理之家VBS系列教程

第二节 第一个程序“Hello World!”(by rat 2008-11-05)



一、源代码


    Option Explicit


    Dim strMessage


    strMessage = “Hello World!”


    MsgBox strMessage




二、分析说明


    1、打开第一节提到的VBSEdit,把代码拷贝进去,保存为hi.vbs文件。运行它,就会看到可爱的信息框!我们的第一个程序问世了!



    2
、下面详细分析一下:


    首先说明的是,代码是从上往下顺序解释执行的;代码不分大小写,尽管如此,大家还是应当坚持该大写时大写,该小写时小写,这样会大大增加代码的可读性。



    1) 1行:请打开第一节中提供给大家的“Microsoft Windows脚本技术.chm”,搜索“Option Explicit”(不包括引号),我们结合这部手册来学

     习。可以看到它的意义是:强制要求显式声明脚本中的所有变量。作用在于:


         a) 可用 Option Explicit避免拼错已存在的变量名称。使用 Option Explicit语句时,必须使用 DimPrivatePublic ReDim语句显式声明所

        有变量。如果试图使用未经声明的变量名,则会出现错误。


         b) 对于作用范围不清楚的变量,使用此语句可避免发生混淆。这涉及到变量的作用范围,而我们的进度还没到,暂且放一边先。现在知道

        有这么回事就行了。


            另外,需要补充说明的是,这句要么出现在第一行(即使是以后要学到的On Error Resume Next也不例外),要么就不出现。如果不出

        现,变strMessage的声明(即第2行的代码)则不是必需的,直接定义strMessage = “Hello World!”就行了,也就是说代码只剩最后两行了,

        鉴于Option Explicit的作用,我们建议加上这句。



    2) 2行:看看手册——激活“目录”选项卡,依次展开目录“Windows脚本技术”、“VBScript”、“用户指南”和“VBScript基础”,查看

    “VBScript变量”。 当然,大家还可以搜索关键字“Dim”。


        我们得知,这句就是声明一个叫做strMessage的变量。


        不难发现,这句并没有指定数据类型。我们查看手册上“VBScript基础”的“VBScript数据类型”,发现:VBScript里只有Variant这一种数

    据类型,而Variant有不少子类型。为什么这么说?我们认为,一个变量在被赋值为某子类型后,还可被重新赋值为其它子类型。如在s=”abc”

    后还可以这样:s=123。但是,我们并不推荐这样做,一个变量最好只用一个子类型,只有一个含义,避免紊乱。


    关于变量的命名规则,请查阅手册上“VBScript基础”的“VBScript编码约定”,我们推荐这样的约定(如果有兴趣,大家可以百度一下“匈牙

    利命名法”、“骆驼式命名法”及“帕斯卡命名法”)。strMessage中的str是子类型string的缩写。



    3) 3行:strMessage赋值,字符串类型。请参考手册,搜索“=”。请注意,“=”左右两侧各有一个空格,这并不是必需的,但可以增加代码

    可读性,所以建议大家也这样用。




    4) 4行:搜索手册的“Msgbox”。关于函数的调用,请找到手册上“VBScript基础”的“VBScript过程”,在最下方的“在代码中使用 Sub

        Function 过程”里有详尽的阐述。Msgbox就是VBScript内置的一个Function。其原型为:


        MsgBox(prompt[, buttons][, title][, helpfile, context])


     方括号“[]”中的参数不是必需的,两个参数之间用一个逗号和空格隔开——虽然空格不是必需的,但可增加代码可读性。



三、总结


       我们引导大家简单地学习了VBScript的“变量”、“数据类型”、“编码约定”和函数的调用等知识。关于这些内容,大家可以常翻阅手册“Microsoft Windows脚本技术.chm”,温故而知新。



四、后记


       其实本文中的源代码例子一句话就可以取代,即MsgBox “Hello World!”,但是为了规范大家的编程习惯,有意设计了那段代码。


       文中如有纰漏,请不吝赐教!


五、习题


    为了帮助大家巩固所学,特出了几道小题。


    回帖答案符合要求者加分鼓励。对于每一道题,第一个答对的人加20PB,第二个10PB,第三个5PB,后面的都是3PB


    答题时,请先标明题号,再写出完整代码,代码用[code][/code]括住。


    郑重强调:代码应当符合编码规范



    1、请将“Hello World!”信息框加上标题,标题为变量,值是你的用户名;加上信息消息图标;按钮为“是”和“否”。


    2、与第1题差不多,只不过用户名要求用InputBox接收,再返回给标题变量。


    3、请定义一个值为答题日期的日期子类型变量,然后转换成字符串,输出到信息框。


    4、在第2题的基础上,再定义一个整数子类型变量,用于接收“Hello World!”信息框的返回值,然后转换成字符串,输出到新的信息框。


[ 本帖最后由 rat 于 2008-11-5 02:41 编辑 ]
作者: Batcher    时间: 2008-11-5 04:56

建议在每个章节的末尾,添加其他章节的链接,方便大家查看。
作者: rat    时间: 2008-11-5 22:26     标题: 回复 3楼 的帖子

几天出一次,不定!

我们还不如就都去看这本手册了

要的就是这个效果!就是在这个基础上补充说明下!
作者: BBCC    时间: 2008-11-6 13:41

题一
  1. Option Explicit
  2. Dim strMessage,title
  3. strMessage = "BBCC"
  4. title = "变量"
  5. MsgBox strMessage,67,title
复制代码
不知道合要求不...
作者: rat    时间: 2008-11-6 14:17     标题: 回复 5楼 的帖子

不太符合
——————————————————————————————————————————————————————————————————————
第一,title变量名不符合规范,应当是strTitle

第二,Dim 声明两个变量,应当是:Dim strMessage, strTitle
(注意逗号后有个空格)
MsgBox调用时也一样,逗号后有个空格

第三,可能你误解题意了,应当是:
strMessage = "Hello World!"
strTitle = "BBCC"

第四,按钮是“是”和“否” ,把67换成68

[ 本帖最后由 rat 于 2008-11-6 14:22 编辑 ]
作者: BBCC    时间: 2008-11-6 20:38

谢谢rat兄的指点,看来在变量方面要多加努力!
作者: BBCC    时间: 2008-11-7 12:58

第二题
  1. Option Explicit
  2. Dim strMessage, strTitle
  3. strMessage = "Hello world!"
  4. strTitle = InputBox("Enter your name." ,strMessage)
  5. MsgBox strMessage,68,strTitle
复制代码

[ 本帖最后由 BBCC 于 2008-11-7 19:41 编辑 ]
作者: rat    时间: 2008-11-7 13:32     标题: 回复 8楼 的帖子

注意等号两边的空格和逗号后的空格;函数名后的括号应当紧跟着,不必用空格隔开
作者: BBCC    时间: 2008-11-7 19:40

ok!
养成一个好习惯很重要!
作者: BBCC    时间: 2008-11-9 09:32

问问rat兄,第三第四题如何做?
作者: rat    时间: 2008-11-9 15:55     标题: 回复 11楼 的帖子

请查看《Microsoft Windows脚本技术》手册上的“VBScript基础”的“VBScript数据类型”
作者: BBCC    时间: 2008-11-9 16:36

题三是这样吗?
  1. Dim strDate
  2. strDate = "9,11,2008"
  3. strDate = cdate(strDate)
  4. strDate = cstr(strDate)
  5. msgbox(strDate)
复制代码

作者: BBCC    时间: 2008-11-9 16:46

题四
  1. Option Explicit
  2. Dim strMessage, strTitle, strValue
  3. strMessage = "Hello world!"
  4. strTitle = InputBox("Enter your name." ,strMessage)
  5. strValue = VarType(MsgBox (strMessage,68,strTitle))
  6. MsgBox(strValue)
复制代码
看来vbs的变量类型很复杂
作者: rat    时间: 2008-11-9 23:14

回复 13、14楼 的帖子:
请查看《Microsoft Windows脚本技术》手册上的“VBScript基础”的“VBScript数据类型”和“VBScript编码约定”


另外,第4题,不是输出MsgBox返回值的类型,而是输出返回值转换后的字符串

[ 本帖最后由 rat 于 2008-11-9 23:18 编辑 ]
作者: BBCC    时间: 2008-11-10 13:18

另外,第4题,不是输出MsgBox返回值的类型,而是输出返回值转换后的字符串

兄的意思是再通过cstr来转换变量类型?
作者: rat    时间: 2008-11-10 13:50     标题: 回复 16楼 的帖子

不是的,再通过cstr来转换返回值
作者: BBCC    时间: 2008-11-10 19:09

是否这样改?
  1. strValue = cstr(VarType(MsgBox (strMessage,68,strTitle)))
复制代码

作者: rat    时间: 2008-11-10 19:27     标题: 回复 18楼 的帖子

就这段而言,应当写作:
Dim intReturn, strReturn
intReturn = MsgBox(strMessage, vbInformation + vbYesNo, strTitle)
strReturn = CStr(intReturn)
'最好把68用vbInformation + vbYesNo来表示,更可读
作者: BBCC    时间: 2008-11-10 19:29

了解,谢谢兄的指导!
作者: lockmove    时间: 2009-2-11 11:02

版主你误导我
最顶上的
strMessage = “Hello World!”
你用了全角,害我的执行不了以为要编译,差点放弃了
作者: Batcher    时间: 2009-2-11 12:36     标题: 回复 21楼 的帖子

可以发短消息给楼主,要求他修改。
作者: keen    时间: 2009-5-21 17:37

1.
  1. Option Explicit
  2. Dim strMessage,  strHead
  3. strMessage = "Hello World!"
  4. strHead = "keen"
  5. MsgBox strMessage,  68,  strHead
复制代码
2.
  1. Option Explicit
  2. Dim strMessage,  strHead
  3. strMessage = "Hello World!"
  4. strHead = InputBox("请输入你的用户名:",  "keen")
  5. MsgBox strMessage,  68,  strHead
复制代码
3.
  1. Option Explicit
  2. Dim dtmMessage
  3. dtmMessage = #2009-5-21#
  4. MsgBox CStr(dtmMessage)
复制代码
4.
  1. Option Explicit
  2. Dim strMessage,  strHead,  intMessage,  strXianshi
  3. strMessage = "Hello World!"
  4. strHead = InputBox("请输入你的用户名:",  "keen")
  5. intMessage = MsgBox (strMessage,  68,  strHead)
  6. strXianshi = CStr(intMessage)
  7. MsgBox strXianshi,  0,  strHead
复制代码

[ 本帖最后由 keen 于 2009-5-23 18:37 编辑 ]
作者: rat    时间: 2009-5-22 15:28     标题: 回复 23楼 的帖子

第3题:
  1. Option Explicit
  2. Dim dtmMessage
  3. dtmMessage = #2009-5-22#
  4. MsgBox CStr(dtmMessage)
复制代码
第4题返回值的变量名最好改作 strReturn 或 strResult 等。
作者: keen    时间: 2009-5-23 18:34

谢谢rat版主的指导,我刚开始接触VBS,以后多多指教!
按照您的第3题的改法,我第4题也可以像下面这样改了:
  1. Option Explicit
  2. Dim strMessage,  strHead,  intReturn
  3. strMessage = "Hello World!"
  4. strHead = InputBox("请输入你的用户名:",  "keen")
  5. intReturn = MsgBox (strMessage,  68,  strHead)
  6. MsgBox CStr(intReturn),  0,  strHead
复制代码

[ 本帖最后由 keen 于 2009-5-23 18:35 编辑 ]
作者: askyer    时间: 2009-7-3 11:09

回答一下,希望有更精彩的教程出来

Option Explicit
Dim strMessage, strTitle, dtmToday, strToday, intResult
strMessage = "Hello World!"
'Qustion1
'strTitle = "askyer"

'Qustion2
strTitle = InputBox("请输入用户名:")
intResult = MsgBox (strMessage, vbYesNo,strTitle)

'Qustion4
MsgBox intResult

'Qustion3
dtmToday = Date
strToday = CStr(dtmToday)
MsgBox strToday
作者: seethesun    时间: 2011-6-19 23:10

最好整个目录,不好找




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2