Vbscript获取某些扩展名的最新唯一文件

时间:2014-04-07 06:18:32

标签: file vbscript

我试图收集某个扩展程序的唯一文件名列表,以便我可以将该信息用作另一个应用程序中的变量。

我的源文件夹包含类似的内容:

C-VOL-B123.ext
C-VOL-B122.ext
D-VOL-B234.ext
D-VOL-B233.ext
E-VOL-B456.ext
E-VOL-B455.ext
Sys-VOL-B234.ext
Sys-VOL-B233.ext

以及许多其他具有不同扩展名的文件。

我正在尝试提供一个输出以下内容的脚本:

C-VOL-B123 D-VOL-B234 E-VOL-B456 Sys-VOL-B234

因此,对于特定扩展名的每个文件,只提供最新的唯一文件名(减去B ***,可能以另一个字母开头,可能不只有4个字符)。

我已经在这里和那里整理了一段代码片段,但是我已经遇到了障碍,这是我到目前为止所做的:

Dim goFS  : Set goFS = CreateObject( "Scripting.FileSystemObject" )
    Dim sExt
    Dim sDir
    sExt = Wscript.Arguments(0)
    sDir = Wscript.Arguments(1)
       oLatest = Array(Nothing, Nothing)
       Dim oFile
       For Each oFile In goFS.GetFolder( sDir ).Files
    If LCase(goFS.GetExtensionName(oFile.Name)) = sExt Then
      If oLatest(0) Is Nothing Then
          Set oLatest(0) = oFile
      ElseIf oFile.DateLastModified > oLatest(0).DateLastModified Then
          Set oLatest(1) = oLatest(0)
          Set oLatest(0) = oFile
      ElseIf oLatest(1) Is Nothing or oFile.DateLastModified > oLatest(1).DateLastModified Then
          Set oLatest(1) = oFile
      End If
    End If
   Next 
   For i=0 to 1
       If Not oLatest(i) Is Nothing Then WScript.Echo oLatest(i).name
       Next

我不确定如何从这里开始,不太熟悉数组。我还需要指出,它可能并不总是相同数量的" unique"文件,某些文件夹可能有2组* .ext文件,如下所示:

C-VOL-B123.ext
C-VOL-B122.ext
D-VOL-B234.ext
D-VOL-B233.ext

甚至一组* .ext文件,因此输出必须是:

C-VOL-B123 D-VOL-B234 for 2

C-VOL-B123 for 1

希望我在这里有意义。提前感谢您提供任何帮助。

JMG

1 个答案:

答案 0 :(得分:0)

使用字典通常比使用数组容易得多。

Option Explicit

Dim fso, folder, file, ext, latest

Set fso = CreateObject("Scripting.FileSystemObject")
Set latest = CreateObject("Scripting.Dictionary")
Set folder = fso.GetFolder("C:\Your\Path")

For Each file In folder.Files
    ext = LCase(fso.GetExtensionName(file))
    If latest.Exists(ext) Then
        If latest(ext).DateLastModified < file.DateLastModified Then
            Set latest(ext) = file
        End If
    Else
        latest.Add ext, file
    End If
Next

现在你可以使用它了:

WScript.Echo latest("docx").DateLastModified
WScript.Echo latest("docx").Name

如果有多个文件具有相同的扩展名和相同的修改日期,请考虑您希望发生什么。相应地更改解决方案。