一步一步学VBScript(4)之WSH对象三

前沿:

脚本可以干什么,它仅仅只是帮助您完成一个事件吗。

我觉得脚本是种生活。它帮你改变繁琐的重复劳动。

您可以让服务器管理着您的工作的。悠闲的品尝杯咖啡

看看Technet。工作学习两不误。这不是最美的事吗。

(-_-!不过这个是理想拉。笑)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

继续上篇的话题

上篇要点:

1.介绍了WSH中的对象。

2.解释了关于WSH中的Using COM objects的相关方法

   也就是Creatobject与Getobject.

3.比较了VBScript与WSH中的CreatObject的区别。

 

本篇主要内容

介绍Handing input 与 Output的相关方法。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

WSH中的Handling input and  output

Echo, Stdout,Stdin,Stderr

 

(1).概要介绍

我们先看看个例子

Wscript.StdOut.Write "Enter a Decimal Number: "

strDecimal = Wscript.StdIn.ReadLine

Wscript.StdOut.WriteLine strDecimal & " is equal to " & _

Hex(strDecimal) & " in hex."

Wscript.Sleep 3000

看不懂?OK。说老实话,刚接触VBScript的时候,居然还有

Wscript.StdOut这东西都感到非常的惊讶。

什么?执行不了!? OK,我相信您如果第一次接触的话

肯定一会被弄得一头雾水。

请您尝试在Cscript下执行这个脚本。(不知道的话请参考本系列的第一篇)

在命令控制台模式下,它会跳出一句话 Enter a Decimal Number:

请您输入数字如256后。他会显示256 is equal to 100 in hex

image

看到这里,大家明白了吧。这个方法怎么那么像上上期的inputbox阿。

嘿嘿,是噢。不过他只能在命令控制台模式下运行。而inputbox则是跳出个框体。

 

~~~~~~~~~~~~我是华丽的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~

切入正题,我们来看张总图吧

image

处理输入输出的方法里面,就只有这4个哦

Echo, Stdout,Stdin,Stderr

下面我会分别介绍下。

 

 

(2)Wscript.Echo

第二篇中已经详细说过了。

OK。我们当中有位同志想给自己心上人写个脚本表达自己的芳心

可惜他犯了个严重的错误。关键部分他打成了这样了。

WScript.Echo ILoveyou

对方非但没理他。还觉得他很莫名其妙。

各为看官帮他看看他错在哪里吧。

 

(3)Wscript.StdOut

能在命令行模式下输出显示(包括批处理)

主要的方法有

Wscript.StdOut.Write

Wscript.StdOut.WriteLine

Wscript.StdOut.WriteBlankLines

 

那两个例子在区分Write与WriteLine

WScript.StdOut.Write "ABCD"

WScript.StdOut.Write "EFGH"

WScript.StdOut.Write "IJKL"

WScript.Sleep 3000

执行后结果为

image

OK,显示为ABCDEFGHIJKL

 

那么

WScript.StdOut.WriteLine "ABCD"

WScript.StdOut.WriteLine "EFGH"

WScript.StdOut.WriteLine "IJKL"

WScript.Sleep 3000

显示结果为

image

显示为 ABCD

       EFGH

       IJKL

OK,区别就在于他会换行咯

 

再看一个例子

Set objNetwork = Wscript.CreateObject("Wscript.Network")

Set objStdOut = WScript.StdOut

objStdOut.Write "User: "

objStdOut.Write objNetwork.UserDomain

objStdOut.Write "\"

objStdOut.Write objNetwork.UserName

objStdOut.WriteBlankLines(1)

objStdOut.WriteLine objNetwork.ComputerName

objStdOut.Write "Information retrieved."

objStdOut.Close

WScript.Sleep 3000

显示结果是什么呢

他和

Set objNetwork = Wscript.CreateObject("Wscript.Network")

WScript.Echo "User: "

WScript.Echo objNetwork.UserDomain

WScript.Echo "\"

WScript.Echo objNetwork.UserName

WScript.Echo objNetwork.ComputerName

WScript.Echo "Information retrieved."

WScript.Sleep 3000

会有多大的区别呢。有兴趣的朋友可以动手看看。

 

(4)Wscript.Stdin

主要的方法有

Wscript.Stdin.Read

Wscript.Stdin.ReadLine

Wscript.Stdin.ReadAll

Wscript.Stdin.Skip

Wscript.Stdin.SkipLine

Wscript.Stdin.AtEndOfLine

Wscript.Stdin.AtEndofStream

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Wscript.Stdin.Read

请看下面例子

WScript.StdOut.Write "Please Enter some words: "

Do Until Wscript.StdIn.AtEndOfLine

strInput = Wscript.StdIn.Read(3)

Wscript.Echo strInput

Loop

WScript.Sleep 3000

请您输入abcdefghijklmn

显示结果为

image

OK。这里的Read(3)是以3个字符为单位分割

如果是汉字的话,则是三个中文字哦。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Wscript.Stdin.ReadLine

也同样看段代码

WScript.StdOut.Write "Please Enter some words: "

Do Until Wscript.StdIn.AtEndOfLine

strInput = Wscript.StdIn.ReadLine

Wscript.Echo strInput

Loop

WScript.Sleep 3000

同样请您输入abcdefghijklmn

结果为

image

OK。他是以行为单位读进去的哦。

 

注意:ReadLine最多只支持长度为254的命令行输入。

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Wscript.Stdin.ReadAll

官方解释为

Used only for reading the output generated by a spawned command-line tool,

batch file, or shell command.

有兴趣的朋友可以去查查官方资料

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Wscript.Stdin.Skip

同样我们也先看一个例子

WScript.StdOut.Write "Please Enter some words: "

WScript.StdIn.Skip(5)

Do Until Wscript.StdIn.AtEndOfLine

strInput = Wscript.StdIn.Read(1)

Wscript.Echo strInput

Loop

WScript.Sleep 3000

输入abcdefghijklmn

结果为

image

OK,很简单把,他跳过了5个字符

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Wscript.Stdin.SkipLine

官方解释为

Used to skip a line when reading the output generated by a spawned command-line tool,

batch file, or shell command.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Wscript.Stdin.AtEndOfLine

Wscript.Stdin.AtEndOfStream

两者都是Boolean值。

这里不详细解释了。在将来关于FSO方面的时候,会用的比较多关于这个这种类型的语句。

到时候会详细介绍给大家听

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

关于Stdout与Stdin就介绍到这里。

是不是感觉有点累了?如果您耐心看完的话。

您肯定会问。不是还有个stderr吗,他怎么用啊。

 

问的好。stderr的确是个好东西。他帮我解决了一个一直没办法解决的问题。

我们通过一个例子来说明这个好东西

我们先建一个叫本放在D:\Script\chu0.vbs

WScript.Echo 1/0

很显然。这个脚本是错误的。

然后您在编写这个脚本

Dim objshell,objexec

Set objshell = CreateObject("WScript.Shell")

Set objexec = objshell.Exec("CScript.exe D:\Script\chu0.vbs")

WScript.Echo "StdErr: " & objexec.StdErr.ReadAll

WScript.Sleep 3000

显示结果为

image

OK?真的,他显示了调用其它脚本错误的返回信息?

太棒了。我终于可以知道是否调用其它脚本是不是有问题了。

不过。很可惜,调用其他脚本时只能用于CScript来调用。在Wscript的情况下。

则直接跳出错误框。不会返回任何错误流。

怎么样,很棒把。那么您可以渐渐尝试了解脚本的错误控制了。

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

今天介绍就到这里,相信大家都累了。

总结下:

1.介绍了WSH中处理输入输出流的方法概要

2.详细介绍了stdout,stdin,stderr.

 

下期中将会介绍

Wscript.Argument.期待您的观看。

 

如果您有什么问题或建议。

非常欢迎您的指导与探讨。

谢谢大家。