vbscript在所有文件中查找具有特定文件名的最近文件

时间:2013-07-01 12:56:18

标签: file vbscript

我只有以下文件。

New Text Document - Copy (1)

New Text Document - Copy (2)

New Text Document - Copy (3)

New Text Document - Copy (4)

New Text Document - Copy (5)

除此之外我还有类似

的东西
Test1.pdf

test2.pdf

Test3.pdf

我的要求是找到文件名为“New Text Document”的最新文件

2 个答案:

答案 0 :(得分:1)

为了帮助您入门:

  ' need a FSO for folder access
  Dim oFS    : Set oFS    = CreateObject("Scripting.FileSystemObject")
  ' hold the file found (if any)
  Dim oFiFnd : Set oFiFnd = Nothing
  ' smallest possible number
  Dim nMax   : nMax       = 0
  ' define which files to consider
  Dim reFiNa : Set reFiNa = New RegExp
  reFiNa.Pattern = "^New Text Document - Copy \((\d+)\)$"
  Dim oFile, oMTS
  ' look at all files in folder
  For Each oFile In oFS.GetFolder("..\testdata\17405017").Files
      Set oMTS = reFiNa.Execute(oFile.Name)
      If 1 = oMTS.Count Then
         ' file confirms to pattern
         If nMax < CLng(oMTS(0).SubMatches(0)) Then
            ' largest nMax seen so far
            nMax       = CLng(oMTS(0).SubMatches(0))
            Set oFiFnd = oFile
         End If
      End If
  Next
  If oFiFnd Is Nothing Then
     ' search failed
     WScript.Echo "No file found."
  Else
     ' success
     WScript.Echo "found", oFiFnd.Path
  End If

更新评论:

如果RegExp找不到任何文件,则文件夹中没有“新文本文档 - 复制(1)”等文件。您可以尝试@ Ansgar不太严格的过滤器 - 只需查看文件名的前17个字符 - 或者修改.Pattern - 例如“”^新文本文档 - 复制((\ d +))。doc $“如果您忘记了.doc扩展名。

查看@ Ansgar的贡献也可以帮助您澄清您的规格:“最新”是指'最后修改文件'还是'最高副本(#)'?

答案 1 :(得分:1)

枚举文件夹中的文件:

Set fso = CreateObject("Scripting.FileSystemObject")
For Each f In fso.GetFolder("C:\some\where").Files
  WScript.Echo f.Name
Next

像这样检查文件的名称(使用LCase()使检查不区分大小写):

If LCase(Left(f.Name, 17)) = "new text document" Then
  'do stuff
End If

请记住最近修改过的文件,如下所示:

Set mostRecent = Nothing
...
If mostRecent Is Nothing Then
  Set mostRecent = f
ElseIf f.DateLastModified > mostRecent.DateLastModified Then
  Set mostRecent = f
End If