我遇到了麻烦,我需要在VBScripting中执行以下任务。在此先感谢您的帮助。
我想将第二个最新修改的文件从一个文件夹复制到另一个位置。
例如:源文件夹“Final”将包含许多子文件夹。运行脚本后,它应检查“Final”的所有子文件夹中的第二个最新修改文件,并将其复制到目标文件夹。
答案 0 :(得分:0)
@user,我相信这是您正在寻找的功能。我在Sub Find()
中解决了问题的核心问题。不保证没有错误,我确信异常处理可以进一步改进。
提示:有关将Microsoft的权威WSH参考作为Windows帮助文件下载的信息,请参阅this answer。
Option Explicit
Dim oFF : Set oFF = New FileFinder
oFF.RootFolder = "C:\Source\Folder" ' absolute or relative path
oFF.DestinationFolder = "C:\Copy\Folder\" ' must end with backslash
On Error Resume Next
'
' Find the newest and second-newest files.
'
oFF.Find
If Err Then
WScript.Echo "Find error: " & Err.Description
WScript.Quit(1)
Else
WScript.Echo "Newest file: " & oFF.NewestFilePath
WScript.Echo "Second-newest file: " & oFF.SecondNewestFilePath
End If
'
' Copy the second-newest file to the destination folder.
'
oFF.CopySecondNewestFileToDestination
If Err Then
WScript.Echo "Copy error: " & Err.Description
WScript.Quit(1)
Else
WScript.Echo "'" & oFF.SecondNewestFilePath _
& "' was copied to folder '" & oFF.DestinationFolder & "'."
End If
Set oFF = Nothing
' ============================================================
Class FileFinder
' Public RootFolder
Public NewestFilePath
Public NewestFileDate
Public SecondNewestFilePath
Public SecondNewestFileDate
Private mFso
Private mRootFolder
Private mDestinationFolder
Private Sub Class_Initialize()
Set mFso = CreateObject("Scripting.FileSystemObject")
Me.SecondNewestFilePath = ""
Me.SecondNewestFileDate = CDate("1970/01/01")
Me.NewestFilePath = ""
Me.NewestFileDate = DateAdd("s", 1, Me.SecondNewestFileDate)
End Sub
Private Sub Class_Terminate()
Set mFso = Nothing
End Sub
Public Property Let RootFolder(sValue)
If Not mFso.FolderExists(sValue) Then
Err.Raise vbObjectError + 1, "", _
"Root folder '" & sValue & "' does not exist."
End If
mRootFolder = sValue
End Property
Public Property Get RootFolder()
RootFolder = mRootFolder
End Property
Public Property Let DestinationFolder(sValue)
If Not (Right(sValue, 1) = "\") Then
Err.Raise vbObjectError + 1, "", _
"Destination folder '" & sValue & "' must end with a backslash."
End If
If Not mFso.FolderExists(sValue) Then
Err.Raise vbObjectError + 1, "", _
"Destination folder '" & sValue & "' does not exist."
End If
mDestinationFolder = sValue
End Property
Public Property Get DestinationFolder()
DestinationFolder = mDestinationFolder
End Property
Public Sub Find()
Dim oFolder : Set oFolder = mFso.GetFolder(RootFolder)
Dim oSubFolder, oFile
For Each oSubFolder In oFolder.SubFolders
For Each oFile In oSubFolder.Files
'
' File is newer than newest file.
'
If DateDiff("s", NewestFileDate, _
oFile.DateLastModified) > 0 Then
SecondNewestFilePath = NewestFilePath
SecondNewestFileDate = NewestFileDate
NewestFilePath = oFile.Path
NewestFileDate = oFile.DateLastModified
'
' File is newer than second-newest file.
'
ElseIf DateDiff("s", SecondNewestFileDate, _
oFile.DateLastModified) > 0 Then
SecondNewestFilePath = oFile.Path
SecondNewestFileDate = oFile.DateLastModified
End If
Next
Next
End Sub
Public Sub CopySecondNewestFileToDestination()
mFso.CopyFile SecondNewestFilePath, DestinationFolder
End Sub
End Class