【问题标题】:Error: Object Required; 'objDIR' Code: 800A01A8错误:需要对象; 'objDIR' 代码:800A01A8
【发布时间】:2014-02-14 07:25:20
【问题描述】:

在发布我的代码之前我遇到的问题...我收到了这个错误

错误:需要对象; '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

【问题讨论】:

  • 我应该添加这是我的第一个 VBS 脚本。

标签: vbscript


【解决方案1】:

要解决您的现实问题,您应该考虑:

  1. 使用 xcopy 或 robycopy 等工具
  2. 避免遍历不应包含用户文件的(子)文件夹;不扫描c:\windowsC:\System Volume Information 会降低风险并提高效率
  3. 一些 dir /s /b c:\can\di\date\*.tiff &gt;&gt; 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 不能那样工作。

【讨论】:

  • 谢谢,我今天会尝试更多地使用它....我确实尝试运行 xcopy,但是当我想要的只是每个子文件夹中的文件时,xcopy 也传输到了实际的文件夹和子文件夹。对于 On Error resume Next,我实际使用它的唯一原因是跳过错误并看到下一个忘记在发短信之前从我的代码中编辑它。不过,我今天会花一些时间与您的建议一起工作,看看我想出了什么。再次感谢!
  • dir /s /b c:\can\di\date*.tiff >> process-later.txt 这实际上是做什么的?只需要知道我可能在我的代码中隐含它的位置和原因。如果您对其应用有一个一般性的陈述,我可能会弄清楚。至于系统卷信息的错误,它仍然不喜欢我的 For Each strFile In objDIR.Files 行
【解决方案2】:

我修复了代码...不确定到底出了什么问题,但我清理了脚本,它又可以工作了。这是其他人可能需要的代码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多