簡體   English   中英

錯誤:對象必填; 'objDIR'代碼:800A01A8

[英]Error: Object Required; 'objDIR' Code: 800A01A8

發布代碼之前遇到的問題...我遇到此錯誤

錯誤:對象必填; 'objDIR'代碼:800A01A8在第19行

當我使用On Error Resume Next and On Error GoTo 0跳過它時,我得到了Error Object required: 'strFile' Line 22我跳過它時,它告訴我我的上一個NEXT不是集合...這是程序的內容效果很好,直到我添加了獲取.tif和.tiff文件的步驟。 現在,即使刪除我添加的內容也不起作用...

該程序的功能是在“源目錄”中搜索可歸檔的文件,然后將這些文件移動到“目標目錄”,然后將其檢查為不可歸檔,以免再次被拾取。 它還記錄了使用日期戳等復制了哪些文件。就像我說的那樣,它工作得很好,但是經過幾個小時的修補后,仍然無法弄清楚出了什么問題...

Option Explicit

Dim objLogFile, objFS, strFolder, strDestination, objFolder, eFolder, strFileName,  
strExtension, objDIR, strFile

Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder = "S:\Source"
strDestination = "Z:\Destination"
Set objFolder = objFS.GetFolder(strFolder)
Set objLogFile = objFS.OpenTextFile ("S:\Log.txt",2,true)

Go(objFolder)

Sub Go(objDIR)
    objLogFile.Writeline "Script started at " & Now
    If objDIR <> "\System Volume Information" Then
        For Each eFolder In objDIR.SubFolders       
            Go eFolder
        Next
        On Error Resume Next
        For Each strFile In objDIR.Files
            On Error GoTo 0
            strFileName = strFile.Name
            strExtension = objFS.GetExtensionName(strFile)
            If strExtension = "pdf" Then
                If objFS.GetFile(strFile).Attributes And 32 Then
                    objFS.CopyFile strFile , strDestination & strFileName, True
                    objLogFile.Writeline "Copied " & strFileName & Now
                Else
                    objFS.GetFile(strFile).Attributes =          objFS.GetFile(strFile).Attributes XOR 32
                End If
            End If              
            If strExtension = "tif" Then
                If objFS.GetFile(strFile).Attributes And 32 Then
                    objFS.CopyFile strFile , strDestination & strFileName, True
                    objLogFile.Writeline "Copied " & strFileName & Now
                Else
                    objFS.GetFile(strFile).Attributes = objFS.GetFile(strFile).Attributes XOR 32
                End If      
            End If
            If strExtension = "tiff" Then
                If objFS.GetFile(strFile).Attributes And 32 Then
                    objFS.CopyFile strFile , strDestination & strFileName, True
                    objLogFile.Writeline "Copied " & strFileName & Now
                Else
                    objFS.GetFile(strFile).Attributes = objFS.GetFile(strFile).Attributes XOR 32
                End If                  
            End If
        Next  
        objFS.GetFile(strFile).Attributes = objFS.GetFile(strFile).Attributes XOR 32
    End If
    objLogFile.Writeline "Script ended at " & Now
    objLogFile.close

    WScript.Quit()
End Sub

要解決現實世界中的問題,您應該考慮:

  1. 使用xcopy或robycopy之類的工具
  2. 避免遍歷不應包含用戶文件的(子)文件夾; 不掃描c:\\windowsC:\\System Volume Information將減少風險並提高效率
  3. 幾個dir /s /bc:\\can\\di\\date\\*.tiff >> process-later.txt可能會給您的.vbs文件提供一個“干凈”的列表

有一個明顯的錯誤:您嘗試避免C:\\System Volume Information ,但是比較\\System Volume Information (無驅動器)。

不太明顯的是:您不能使用

On Error Resume Next
 For Each strFile In objDIR.Files
On Error GoTo 0

“跳過討厭元素的循環”。 OERN不能那樣工作。

我修復了代碼...不確定到底出了什么問題,但是我清理了腳本,它再次起作用。 這是代碼,以防其他任何人可能需要它。

Set objFS = CreateObject("Scripting.FileSystemObject")
strFolder = "S:\Source"
strDestination = "Z:\Destination\"
Set objFolder = objFS.GetFolder(strFolder)
Set objLogFile = objFS.OpenTextFile ("S:Logs.txt",2,true)

Go(objFolder)

Sub Go(objDIR)
    objLogFile.Writeline "Script started at " & Now
    If objDIR <> "\System Volume Information" Then
        For Each eFolder In objDIR.SubFolders       
        Go eFolder
    Next
    For Each strFile in objDIR.files
        strFileName = strFile.Name
        strExtension = objFS.GetExtensionName(strFile)
        If strExtension = "pdf" Then
            If objFS.GetFile(strFile).Attributes And 32 Then
                objFS.CopyFile strFile , strDestination & strFileName, True
                objLogFile.Writeline "Copied " & strFileName & Now
                objFS.GetFile(strFile).Attributes = objFS.GetFile(strFile).Attributes XOR 32
            End If
        End If              
        If strExtension = "tif" Then
            If objFS.GetFile(strFile).Attributes And 32 Then
                objFS.CopyFile strFile , strDestination &     strFileName, True
                objLogFile.Writeline "Copied " & strFileName & Now
                objFS.GetFile(strFile).Attributes =     objFS.GetFile(strFile).Attributes XOR 32
            End If      
        End If
        If strExtension = "tiff" Then
            If objFS.GetFile(strFile).Attributes And 32 Then
                objFS.CopyFile strFile , strDestination &     strFileName, True
                objLogFile.Writeline "Copied " & strFileName & Now
                objFS.GetFile(strFile).Attributes =     objFS.GetFile(strFile).Attributes XOR 32
            End If                  
        End If
    Next  
End If
objLogFile.Writeline "Script ended at " & Now
objLogFile.close

WScript.Quit()
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM