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

Error Handling in VBScript to check for number of files in a folder

我写了一个脚本来检查文件夹中是否存在 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

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

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

显然你有更多计划考虑你代码中的所有 'extra' 个变量,如 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)