Vbscript 通过使用带有.Files的变量设置文件对象

Vbscript 通过使用带有.Files的变量设置文件对象,vbscript,Vbscript,我将其用于HP Operations Manager,它使用参数部分,因此您可以从HPOM策略中定义变量。这目前适用于硬编码的一个文件,但我希望能够使用参数设置文件名,因此脚本是通用的 这样做的目的是检查特定文件是否存在,并设置一个变量(Rule.Status=True),如果该变量的时间超过FileAge变量中指定的分钟数 现在我正在使用: Set MonitorFile = MonitorFolder.Files("EDI.001") 那很好。但当我尝试这样做时: Set MonitorF

我将其用于HP Operations Manager,它使用参数部分,因此您可以从HPOM策略中定义变量。这目前适用于硬编码的一个文件,但我希望能够使用参数设置文件名,因此脚本是通用的

这样做的目的是检查特定文件是否存在,并设置一个变量(
Rule.Status=True
),如果该变量的时间超过
FileAge
变量中指定的分钟数

现在我正在使用:

Set MonitorFile = MonitorFolder.Files("EDI.001")
那很好。但当我尝试这样做时:

Set MonitorFile = MonitorFolder.Files(FileName)
它失败,出现以下错误:

无效的过程调用或参数

我做错什么了吗?在这种情况下,是否有更好的方法使用变量

以下是整个脚本:

'PARAMETERS START

'PARAMETER FolderName STRING DEFAULT "D:\RFInput\InBoxPO" VALUE "D:\RFInput\InBoxPO\" SESSION
Dim FolderName
FolderName = "D:\RFInput\InBoxPO\"
Session("FolderName") = FolderName

'PARAMETER FileAge INT DEFAULT "60" VALUE "1" SESSION
Dim FileAge
FileAge = 1
Session("FileAge") = FileAge

'PARAMETER FolderDisplayName STRING DEFAULT "InBoxPO" VALUE "InBoxPO" SESSION 
Dim FolderDisplayName
FolderDisplayName = "InBoxPO"
Session("FolderDisplayName") = FolderDisplayName

'PARAMETER FileName STRING DEFAULT "EDI.001" VALUE "EDI.001" SESSION
Dim FileName
FileName = "EDI.001"
Session("FileName") = FileName

'PARAMETERS END

Dim fs, MonitorFolder, MonitorFile, objShell, MinutesOld
Dim objFile, listNames
' Set constants for working with files
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Set objShell = CreateObject("Shell.Application")
Set fs = CreateObject("Scripting.FileSystemObject")
Set MonitorFolder = fs.GetFolder(FolderName)

Rule.Status = False

For Each objFile In MonitorFolder.Files 
    listNames = objFile.Name 
    If InStr(listNames, FileName) = 1 Then
        Set MonitorFile = MonitorFolder.Files("EDI.001")
        MinutesOld = DateDiff("n", MonitorFile.DateLastModified, Now)
        If MinutesOld > FileAge Then
            'Turn on for debugging - Wscript.Echo FileName & " is older than " & FileAge & " minutes in folder " & FolderName & "."
            Rule.Status = True
        End If
    End If
Next
Set objShell = Nothing
Set fs = Nothing
Set MonitorFolder = Nothing
'END OF SCRIPT

实际上,对
文件
集合中特定项的访问似乎只对字符串文本有效,但不确定原因

您可以简化每个循环的
,不过:

For Each objFile In MonitorFolder.Files 
    If LCase(objFile.name) = LCase(FileName) Then
        Set MonitorFile = objFile
        ...
    End If
Next
如果您需要按文件名查找,您可以构建如下的

Set filenames = CreateObject("Scripting.Dictionary")
For Each objFile In MonitorFolder.Files
    filenames.Add objFile.Name, objFile
Next
Set MonitorFile = filenames(FileName)
这将允许您按以下名称访问文件:

Set filenames = CreateObject("Scripting.Dictionary")
For Each objFile In MonitorFolder.Files
    filenames.Add objFile.Name, objFile
Next
Set MonitorFile = filenames(FileName)

谢谢你的提示!我很高兴我没有发疯