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”。
请告诉我这种情况......
答案 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 ...
会更容易阅读和理解。