VBScript中的错误处理以检查文件夹中的文件数

时间:2018-08-13 15:07:29

标签: vbscript

我写了一个脚本来检查一个文件夹中是否存在4个文件。对于这一小段代码,我需要使用以下错误处理。

此代码检查各种文件夹以查看其是否包含4个文件。如果它做好了,那么如果不好,那就不好了。

代码:

Const intOK = 0
Const intCritical = 2
Const intError = 3
Const ForReading=1,ForWriting=2,ForAppending=8
Dim filename,filenamemov,emailaddr
Dim arrFolders(17)
Dim argcountcommand,dteToday
Dim arg(4)
Dim strMailServer,Verbose,strExt,numfiles,intIndex
Dim intcount : intCount = 0
Dim stroutput

numfiles =  4  'how many minutes old are the files
Verbose = 0    '1 FOR DEBUG MODE, 0 FOR SILENT MODE

arrFolders(0) = "D:\AS2\Inbound\WESSEX"
arrFolders(1) = "D:\AS2\Inbound\EATWELL"
arrFolders(2) = "D:\AS2\Inbound\TURNER\"

For intIndex = 0 To UBound(arrFolders)
    pt "Checking folder: " & arrFolders(intIndex)
    If arrFolders(intIndex) = "" Then
        pt "Empty folder value!"
        Exit For
    Else
        Call checkfiles(arrFolders(intIndex))
    End If
Next

If objFolder.Files.Count < 4 Then
    WScript.Echo "CRITICAL - " & intCount & " File(s) over " & numfiles & " 
minutes in " & stroutput
    WScript.Quit(intCritical)
Else
    WScript.Echo  "OK - No directory contains less than 4 files"
    WScript.Quit(intOK)
End If

Sub checkfiles(folderspec)
    'check If any files exist on folder
    On Error Resume Next
    Dim objFso : Set objFso = CreateObject("Scripting.FileSystemObject")

    'you can take this as input too using InputBox 
    'this will error If less than 4 files exist.
    Dim objFolder : Set objFolder = objFso.GetFolder(strFolderPath) 
    If objfolder.Files.Count = 4 Then
        MsgBox "This is Correct"
    Else
        MsgBox "This isnt Correct"
    End If

    Sub pt(txt)
        If Verbose = 1 Then
            WScript.Echo txt
        End If
    End Sub

1 个答案:

答案 0 :(得分:1)

如果我理解您的问题,您想

  • 检查数组中保存的一组文件夹中包含的文件数量
  • 如果任何文件夹的文件少于4个,应显示一条错误消息
  • 文件夹数组可以包含空值,例程应跳过这些值

显然,您有更多的计划来考虑代码中所有的“额外”变量,例如Const ForReading=1,ForWriting=2,ForAppending=8Dim filename,filenamemov,emailaddr,但我在这里省略了它们,因为它们与当前的问题无关

Option Explicit

Const intOK = 0
Const intCritical = 2
Const intError = 3

Dim Verbose, path, fileCount, minCount, intCount, errCount
Dim objFso, objFolder, intResult, strResult

Verbose  = 0   '1 FOR DEBUG MODE, 0 FOR SILENT MODE
minCount = 4   'The minimal number of files each folder should have

Dim arrFolders(17)
arrFolders(0) = "D:\AS2\Inbound\WESSEX"
arrFolders(1) = "D:\AS2\Inbound\EATWELL"
arrFolders(2) = "D:\AS2\Inbound\TURNER\"

Set objFso = CreateObject("Scripting.FileSystemObject")

intResult = intOK  'assume all is well
strResult = ""     'to accumulate critical errors for each folder
intCount  = 0      'the total running count of folders we have checked
errCount  = 0      'the total count of errors (folders with less than 4 files) we have found
For Each path In arrFolders
    If Len(path) > 0 Then
        intCount = intCount + 1
        WScript.Echo "Checking folder: " & path
        Set objFolder = objFso.GetFolder(path)
        fileCount = objfolder.Files.Count
        'considering the "OK - No directory contains less than 4 files" message
        'in your original post, this test needs to do a 'Greater Than Or Equal To', so use  >=
        If fileCount >= minCount Then
            WScript.Echo "This is correct: " & path
        Else
            WScript.Echo "This is NOT correct: " & path
            strResult = strResult & vbNewLine & "CRITICAL - " & fileCount & " File(s) in folder " & path
            intResult = intCritical
            errCount = errCount + 1
        End If
    End if
Next

'clean up used objects
Set objFolder = Nothing
Set objFso = Nothing

If errCount > 0 Then
    'we have folders with errors
    WScript.Echo strResult
Else
    'This message implies that a folder is also 'Good' when more than 4 files exist
    WScript.Echo "OK - All " &  intCount & " directories contain at least " & minCount & " files"
End If
WScript.Quit(intResult)