Vbscript 用于删除超过n天的文本文件的VBS脚本

Vbscript 用于删除超过n天的文本文件的VBS脚本,vbscript,Vbscript,我想删除n天前创建的某个目录中的所有文本文件。把它看作是一项家务活 我目前有一个脚本可以很好地实现这一点,但它使用了文件的创建日期。我现在必须检查文件名中的日期,并删除所有与脚本参数匹配的文本文件 ' Objective: To delete old files from a given folder and all subfolders below ' ' ' Format: cscript deloldfiles.vbs {DriveLetter:\FolderName} {#ofDays}

我想删除n天前创建的某个目录中的所有文本文件。把它看作是一项家务活

我目前有一个脚本可以很好地实现这一点,但它使用了文件的创建日期。我现在必须检查文件名中的日期,并删除所有与脚本参数匹配的文本文件

' Objective: To delete old files from a given folder and all subfolders below
'
'
' Format: cscript deloldfiles.vbs {DriveLetter:\FolderName} {#ofDays}
'     or: cscript deloldfiles.vbs {\\servername\FolderName} {#ofDays}
' Example: cscript deloldfiles.vbs c:\dba\log 3
'    (deletes files older than 3 days from the \dba\log file on drive C:)

Set objArgs = WScript.Arguments
FolderName =objArgs(0)
Days=objArgs(1)

set fso = createobject("scripting.filesystemobject")
set folders = fso.getfolder(FolderName)
datetoday = now()
newdate = dateadd("d", Days*-1, datetoday)
wscript.echo "Today:" & now()
wscript.echo "Started deleting files older than :" & newdate 
wscript.echo "________________________________________________"
wscript.echo ""
recurse folders 
wscript.echo ""
wscript.echo "Completed deleting files older than :" & newdate 
wscript.echo "________________________________________________"

sub recurse( byref folders)
  set subfolders = folders.subfolders
  set files = folders.files
  wscript.echo ""
  wscript.echo "Deleting Files under the Folder:" & folders.path
  wscript.echo "__________________________________________________________________________"
  for each file in files
    if file.datelastmodified < newdate then
      wscript.echo "Deleting " & folders.path & "\" & file.name & " last modified: " & file.datelastmodified
      on error resume next
' === to test this script but not actually delete files, comment out the next line ===
    file.delete
    end if

  next  

  for each folder in subfolders
    recurse folder
  next  

  set subfolders = nothing
  set files = nothing

end sub

有什么办法吗?

如果示例名称具有代表性,可以使用Mid()和DateSerial()从文件名中获取日期(使用正确的类型):

>> s = "SynchroniseUsersFromBBS_LOG_20140910_412.txt"
>> d = DateSerial(CLng(Mid(s, 29, 4)), CLng(Mid(s, 33, 2)), CLng(Mid(s, 35, 2)))
>> WScript.Echo s, "=>", TypeName(d), d
>>
SynchroniseUsersFromBBS_LOG_20140910_412.txt => Date 10.09.2014
>>
如果没有,则必须使用基于文件名更详细描述的RegExp

PS:

无RegExp,但通过InStr(修订版)实现更大的灵活性:

>> s = "SynchroniseUsersFromBBS_LOG_20140910_412.txt"
>> d = DateSerial(CLng(Mid(s, 29, 4)), CLng(Mid(s, 33, 2)), CLng(Mid(s, 35, 2)))
>> WScript.Echo s, "=>", TypeName(d), d
>>
SynchroniseUsersFromBBS_LOG_20140910_412.txt => Date 10.09.2014
>>
>> s = "FromBBS_LOG_20140910_412.txt"
>> p = InStrRev(s, "_") - 8
>> d = DateSerial(CLng(Mid(s, p, 4)), CLng(Mid(s, p + 4, 2)), CLng(Mid(s, p + 6, 2)))
>> WScript.Echo s, "=>", TypeName(d), d
>>
FromBBS_LOG_20140910_412.txt => Date 10.09.2014
>>