PDA

Показать полную графическую версию : [решено] Как на VBS выбрать файл


RazdoR
15-05-2013, 14:13
Такая задача: есть файлы с названием archiv15052013_134956, archiv06052013_110003, archiv25042013_110014 и так далее, archiv - неизменная часть, дальше дата и время, необходимо выбрать из этих файлов предпоследний. Можно по названию, можно по дате изменения файла. Как это реализовать на vbs?
Всё до чего я пока додумал - несколько строк.
For Each File in objFolder.Files

If LCase(filesys.GetExtensionName(File)) = "rptk" AND _
DateDiff("D", File.DateLastModified, Now) < AND _
DatePart("h", File.DateLastModified) Then
File.Delete true
End If
Next
может подскажет кто-нибудь?

Iska
15-05-2013, 16:09
Например, так:
Option Explicit

Const adDate = 7
Const adVarChar = 200


Dim strFolder

Dim objFSO
Dim objFile
Dim objRegExp



strFolder = "E:\Песочница\0253"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objRegExp = WScript.CreateObject("VBScript.RegExp")

objRegExp.Pattern = "archiv\d{8}_\d{6}\.rptk"

If objFSO.FolderExists(strFolder) Then
With WScript.CreateObject("ADODB.Recordset")
With .Fields
.Append "Path", adVarChar, 2^15 - 1
.Append "DateLastModified", adDate
End With

.Open
.Sort = "DateLastModified DESC"

For Each objFile In objFSO.GetFolder(strFolder).Files
If objRegExp.Test(objFile.Name) Then
.AddNew Array("Path", "DateLastModified"), Array(objFile.Path, objFile.DateLastModified)
End If
Next

If .RecordCount >= 2 Then
.MoveFirst
.MoveNext

With .Fields
WScript.Echo .Item("DateLastModified").Value, vbTab, .Item("Path").Value
End With
Else
WScript.Echo "No such file"
End If


.Close
End With
Else
WScript.Echo "Can't find folder [" & strFolder & "]"
End If

Set objRegExp = Nothing
Set objFSO = Nothing

WScript.Quit 0
Естественно, если файлов меньше двух — предпоследнего не будет.

RazdoR
16-05-2013, 08:53
Iska, огромнейшее спасибо:)




© OSzone.net 2001-2012