确定我在发布代码之前遇到的问题......我收到此错误
错误:对象必需; '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
答案 0 :(得分:1)
要解决您的现实世界问题,您应该考虑:
c:\windows
或C:\System Volume Information
会降低风险并提高效率dir /s /b c:\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就是这样不行。
答案 1 :(得分:0)
我修复了代码...不确定到底出了什么问题,但我清理了脚本并再次运行。以下是其他人可能需要的代码。
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