コレクション(配列、フォルダー、..)から極値(最大、最近使用された、...)を取得する問題を解決するための開始点は、イディオム/パターンである必要があります。
Dim sDir : sDir = "..\data\12203427"
Dim oSDir
For Each oSDir In goFS.GetFolder(sDir).SubFolders
WScript.Echo "Saw:", oSDir.DateCreated, oSDir.Name
Next
出力:
Saw: 30.08.2012 21:42:59 devbuild-15.10
Saw: 30.08.2012 21:43:24 DEVBUILD-15.09
Saw: 30.08.2012 21:44:21 devbuild-9.123
Saw: 30.08.2012 21:31:29 DebugBuild-15.0
Saw: 30.08.2012 21:24:00 DevBuild-14.0
すべての余分な変数(folder、folderNames、...)は、エラーが発生しやすい脂肪です。
.DateCreatedを使用して「最後の」サブフォルダーを取得するには、
- 表示された最新のフォルダーの.DateCreatedを追跡する日付(範囲外の小さな日付に初期化されます)
- これまでの最新フォルダを記録するIfステートメント
名前/プレフィックスに従ってフォルダをフィルタリングするには、次を追加します
- プレフィックスとその長さ
- 一致しないfolder(names)を回避するためのIfステートメント
コード内:
Dim sDir : sDir = "..\data\12203427"
Dim dtMR : dtMR = #1/1/1970#
Dim sMRDir : sMRDir = ""
Dim sPfx : sPfx = "devbuild-"
Dim nPfx : nPfx = Len(sPfx)
Dim oSDir
For Each oSDir In goFS.GetFolder(sDir).SubFolders
WScript.Echo "Saw:", oSDir.Name
If 0 = StrComp(sPfx, Left(oSDir.Name, nPfx), vbTextCompare) Then
WScript.Echo Space(4), "DC:", oSDir.DateCreated
If dtMR < oSDir.DateCreated Then
dtMR = oSDir.DateCreated
sMRDir = oSDir.Name
Else
WScript.Echo Space(4), "older then", dtMR
End If
Else
WScript.Echo Space(4), "does not start with", sPfx
End If
Next
WScript.Echo "-----------"
If "" = sMRDir Then
WScript.Echo "no subfolder found"
Else
WScript.Echo "found", sMRDir, dtMR
End If
出力:
Saw: devbuild-15.10
DC: 30.08.2012 21:42:59
Saw: DEVBUILD-15.09
DC: 30.08.2012 21:43:24
Saw: devbuild-9.123
DC: 30.08.2012 21:44:21
Saw: DebugBuild-15.0
does not start with devbuild-
Saw: DevBuild-14.0
DC: 30.08.2012 21:24:00
older then 30.08.2012 21:44:21
-----------
found devbuild-9.123 30.08.2012 21:44:21
フォルダ名のバージョンに依存するには、同じ戦略に従いますが、適切なデータ型(doubleバージョン、RegExpフィルター、およびエクストラクター)を使用します。
Dim sDir : sDir = "..\data\12203427"
Dim dblMR : dblMR = -1.0
Dim sMRDir : sMRDir = ""
Dim reCut : Set reCut = New RegExp
reCut.IgnoreCase = True
reCut.Pattern = "^DevBuild-(\d+\.\d+)$"
Dim oSDir
For Each oSDir In goFS.GetFolder(sDir).SubFolders
WScript.Echo "Saw:", oSDir.Name
Dim oMTS : Set oMTS = reCut.Execute(oSDir.Name)
If 1 = oMTS.Count Then
Dim dblCVers : dblCVers = CDbl(oMTS(0).SubMatches(0))
WScript.Echo Space(4), "Version:", dblCVers
If dblMR < dblCVers Then
dblMR = dblCVers
sMRDir = oSDir.Name
Else
WScript.Echo Space(4), "older then", dblMR
End If
Else
WScript.Echo Space(4), "does not match", reCut.Pattern
End If
Next
WScript.Echo "-----------"
If "" = sMRDir Then
WScript.Echo "no subfolder found"
Else
WScript.Echo "found", sMRDir, dblMR
End If
出力:
Saw: devbuild-15.10
Version: 15,1
Saw: DEVBUILD-15.09
Version: 15,09
older then 15,1
Saw: devbuild-9.123
Version: 9,123
older then 15,1
Saw: DebugBuild-15.0
does not match ^DevBuild-(\d+\.\d+)$
Saw: DevBuild-14.0
Version: 14
older then 15,1
-----------
found devbuild-15.10 15,1
(!ドイツ語ロケール!)