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