用一个脚本多次读一个文件,或者打开一个文本文件然后将它所有的内容全部保存给一个字符串变量,然后搜索这个字符串来查找特定的错误的代码。找对错误后,再逐行去读取文件,提炼出有错误的每一行。如果你尝试多次去读一个文件,你不会收到你期待的结果,而是会遇到一个运行的错误。例如下的脚本读取一个文本文件,返回文件的内容到屏幕,然后尝试重复这样的过程:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:FSOScriptLog.txt", 1)
Wscript.Echo "Reading file the first time:"
strContents = objFile.ReadAll
Wscript.Echo strContents
Wscript.Echo "Reading file the second time:"
Do While objFile.AtEndOfStream = False
strLine = objFile.ReadLine
Wscript.Echo strLine
Loop
当在 cscript 下运行的是命令行的信息如下:
Reading file the first time:
File line 1.
File line 2.
File line 3.
Reading file the second time:
第一次文件是被读取的,内容存储在变量 strContents 上,第二次,文件读取的时候,没什有数据回显在屏幕上,这是因为文件已经到达了文件的末尾,没有其它的数据给你读了。为了读取这个数据,你必须关闭这个文件然后重新打开它。你不能在读到文件的末尾之后去跳到文件的开头去了。TextStreamObject Close 方法用来关闭一个文本文件。例如,下面的脚本创建一个FSO 对象实例,然后打开一个文本文件,然后在立即关闭了。为了访问文件的内容,你必须再一次的调用 OpenTextFile 方法去重新打开这个文件。
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:FSOScriptLog.txt", 1)
objFile.Close
读取文本文件
在许多的企业脚本中,读取文本文件的内容是个标准进程,你可以用这个功能来读取命令行的参数。例如,你的文本文件包含了计算机名字的列表,脚本审计成读取这个列 表,然后在每个计算机上运行这个脚本。搜索满足特定条件的日志文件。例如,你或许想找所有有错误的日志。将日志文件中添加内容并且汇入到数据库。例如,你或许有一个服务或者程序来保存信息到特定存文本文件格式。然后你用脚本来读取这个文件拷贝相关的信息到数据库中。
可以用 FSO 来都读取文本文件的内容,但是有以下几点你需要牢记:FSO 只能读取 ASCII 的文本文件。你不能用 FSO 读取unicode 或者 binary 文件格式的文件,比如 microsoft word 或者是 Microsoft excel .用 FSO 读取文本文件的时候,只能有一种方式:从前到后。此外,FSO 读取文件的时候是逐行读取的。如果你试图返回前面的行,你必须从开始再重新读取,直到特定的行。 你不能打开一个文件同时用来读和写。如果你打开一个文件是为了读的,那么你想修改文件内容的时候,你必须重新打开文件。如果你尝试在写的模式下读取文件,那么你会收到一个 bad file mode 的错误。
还有读取特定的字符然后停止也是我们常用的技巧。例如,如下的命令会读取第一行的前 12 个字符Alerter.Shar,并且将它赋值给变量 strText,然后停止:strText = objTextFile.Read(12)
ReadLine 读取文本文件中每行的信息然后在到达新的一行的之前停止。例如,如下的命令读取第一行并且将它赋值给变量strText,然后停止。strText = objTextFile.ReadLine
为了逐行读取整个文件的内容,将 ReadLine 放在一个循环中。
ReadAll Reads the entire contents of a text file into a variable.
Skip 跳过特定的数目的字符之后停止。例如,如下的命令面跳过前面的 12 字节,后操作都说从第 13 个字符开始。
objTextFile.Skip(12)
SkipLine 跳过一整行。例如,如下的代码先读第一行,然后读取第三行。跳过了第二行
strText = objTextFile.Readline
objTextFile.SkipLine
strText = objTextFile.Readline