VBscript输出无法正确写入

时间:2012-10-24 02:02:25

标签: scripting vbscript

Hello Scripting Experts,

我在远程服务器上有一个日志文件.. 在远程服务器c:\vb\text.log

我已将我的远程系统包含在list.Txt

server1
server2

下面是log ..

的样本
application working
[10/23/2012 working

[10/24/2012 nos appdown
error found you need to check this

以下是我的剧本。

Set Fso = CreateObject("Scripting.FileSystemObject")
Set InFile = fso.OpenTextFile("list.Txt")
Set out = fso.CreateTextFile("error.log")

Const ForReading = 1
Do While Not (InFile.atEndOfStream)
  strComputer = InFile.ReadLine
  today = Date()
  Set fso = CreateObject("Scripting.FileSystemObject")
  strFilePath = "\\" & strComputer & "\c$\vb\"

  Set InputFile = fso.OpenTextFile(strFilePath & "text.log", 1)
  Do While Not (InputFile.AtEndOfStream)
    strLine = InputFile.ReadLine

    If Left(line, Len(today)+1) = "[" & today Then
      ' line timestamped with today's date
      If InStr(line, "nos") > 0 Then
        ' line contains "error"
        out.WriteLine InStr & vbTab & strComputer
      End If
    End If
  Loop
  InputFile.close
Loop

out.Close
InFile.Close

基本上,上述脚本应仅从text.log [10/24/2012 nos appdown文件中搜索当前日期行。然后,如果在当前日期行中找到“否”,则应该使用计算机名称写入error.log

在我的情况下,输出不会出现,但看起来它正在搜索字符串“Nos”。

请告诉我这种情况......

2 个答案:

答案 0 :(得分:3)

错误是您没有指定显式选项。像这样,

option explicit

这将迫使VBScript抱怨未声明的变量。通过这样做,您可以轻松找到拼写错误的变量名称。具有暗淡语句的Delcare变量,如此

dim Fso, out

再次运行脚本,看到你在比较中使用了一个不存在的和未初始化的变量:

strLine = InputFile.ReadLine ' Read stuff to strLine
If Left(line, Len(today)+1) = "[" & today Then ' ERROR. line has no value!

答案 1 :(得分:0)

您的脚本改编有几个问题:

  • 正如vonPryz已经指出的那样,这就是问题的原因:

      

    strLine = InputFile.ReadLine
       If Left(line, Len(today)+1) = "[" & today Then

    当您将变量名称从file更改为strFile时,您必须更改该变量的每个出现次数,而不仅仅是它所分配的行。

  • out.WriteLine InStr & vbTab & strComputer

    这一行也会失败,因为InStr是一个函数,你不能用正确数量的参数调用它。

  • today = Date()

    这不应该在循环内,除非您希望在脚本运行期间更改日期并且需要在每个循环周期中都有当前日期。

  • Set fso = CreateObject("Scripting.FileSystemObject")

    fso在脚本开头实例化。没有必要重新实例化它,特别是在每个循环周期中都没有。这只是浪费资源。

  • Const ForReading = 1

    当你永远不使用它时,没有必要定义一个常数。

  • Do While Not ...

    使用Do Until ...会更容易阅读和理解。