2012-07-12 47 views
1

目标:运行每天检查文件夹的VBScript,并报告当天是否没有文件保存。忽略前几天存在的文件。VBScript - 文件未创建时的通知

场景:日志文件在C:\ Temp每天早上3点创建。这就是告诉我们系统执行了一项任务。如果没有生成日志文件,则任务崩溃。我编写了这个程序来检查当前创建的文件的Temp文件夹,如果它不存在,给我发电子邮件。

解决方案迄今:

option explicit 
dim fileSystem, folder, file 
dim path 
path = "C:\Temp" 

Set fileSystem = CreateObject("Scripting.FileSystemObject") 
Set folder = fileSystem.GetFolder(path) 

for each file in folder.Files  
    if file.DateLastModified > dateadd("h", -24, Now) then 
'WScript.Echo file.Name & " last modified at " & file.DateLastModified 
else 
SendEmail 
'WScript.Echo "this should have sent an email." 
    end if 
next 

Function SendEmail() 
'Send Email notification function here (this part works already) 
End Function 

问题我有:

我似乎无法换我的头周围的方式使用该脚本忽略来自前几天的文件夹中的文件。

在我的测试中,我有C:\ Temp popuruated,今天修改了一个文件,并在2012年7月10日修改了一个文件。因为这个场景匹配'then'和'else'语句,所以这两个都是。

我想我只需要稍微修改一下循环来告诉它 忽略文件没有过期日期 如果今天没有文件存在,请发送电子邮件。

任何帮助都会很棒。我似乎无法“看到”答案。

回答

1

你很近。问题在于你在循环查看每一个文件。您只需检查一个文件是否不存在。我对vbscript并不熟悉,所以您可能需要稍微调整一下,但我所做的是添加变量found并将其初始化为false。如果您发现过去24小时内创建的文件,请将其设置为true。一旦您完成了循环,如果它仍然false,没有文件在过去24小时内

option explicit 
dim fileSystem, folder, file 
dim path 
Dim found 
found = false 
path = "C:\Temp" 

Set fileSystem = CreateObject("Scripting.FileSystemObject") 
Set folder = fileSystem.GetFolder(path) 

for each file in folder.Files  
    if file.DateLastModified > dateadd("h", -24, Now) then 
    found = true 
    end if 
next 
if (found = false) then 
    SendEmail 
End If 


Function SendEmail() 
'Send Email notification function here (this part works already) 
End Function 
+0

就是这样!我只需要一个触发器 - 谢谢你! – 2012-07-12 18:58:29

0

我建议首先从日期检查移除时

其次既然你说,该文件被修改创建每晚我会检查DateCreated而不是DateModified。

我修改下面的代码添加变量点心指明MyDate,然后将其设置为前一天

Dim myDate 
myDate = dateadd("d", -1, FormatDateTime(Now, 2)) 

后来我改了行

if file.DateCreated > myDate then 

看新变量。
使用echo命令运行此工作,正如您所描述的 一样,并仅通知我今天创建的文件。

option explicit 
dim fileSystem, folder, file 
dim path 
path = "C:\Temp" 
Set fileSystem = CreateObject("Scripting.FileSystemObject") 
Dim myDate 
myDate = dateadd("d", -1, FormatDateTime(Now, 2)) 
Set folder = fileSystem.GetFolder(path) 
for each file in folder.Files 
    if file.DateCreated > myDate then 
     'WScript.Echo file.Name & " last modified at " & file.DateCreated 
     SendEmail 
    'WScript.Echo "this should have sent an email." 
    end if 
next 

Function SendEmail() 
'Send Email notification function here (this part works already) 
End Function 
0

这个脚本:

Option Explicit 

    ' config data, fixed 
    Const csPATH = "..\data" 

    ' config data, computed, show use of DateValue() to cut off time 
    Dim dtCheck : dtCheck = DateValue(DateAdd("d", 0, Now)) 
    WScript.Echo "dtCheck:", dtCheck 

    Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject") 

    Dim bFound : bFound = False ' assume no up-to-date file found 
    Dim oFile 
    For Each oFile In oFS.GetFolder(csPATH).Files 
     WScript.Echo "Check:", DateValue(oFile.DateLastModified), oFile.Name 
     If DateValue(oFile.DateLastModified) = dtCheck Then 
     WScript.Echo "Found:", DateValue(oFile.DateLastModified), oFile.Name 
     WScript.Echo "no need for further loopings" 
     bFound = True 
     Exit For 
     End If 
    Next 
    If Not bFound Then 
    WScript.Echo "Sending email ..." 
    End If 

输出1:

dtCheck: 12.07.2012 
Check: 11.07.2012 11434579.kpf 
Check: 11.07.2012 11434579.notes 
Check: 11.07.2012 11434579-UE15.prj 
Sending email ... 

输出2:

dtCheck: 12.07.2012 
Check: 11.07.2012 11434579.kpf 
Check: 11.07.2012 11434579.notes 
Check: 11.07.2012 11434579-UE15.prj 
Check: 12.07.2012 11458011.notes 
Found: 12.07.2012 11458011.notes 
no need for further loopings 

上打破/退出循环鬼的做法,尽快膨胀,一个/最新的文件被找到,avoi ds重新计算循环中的检查日期(基于易失性Now!),并说明不写入代码的重要性(例如:Set folder = ...,If(found = false)..)。