我使用SVN和标签标记的版本,用版本号命名的每个标签目录。 这是一切优秀的,但现在我在使用Visual构建临自动化的构建过程的过程。
我使用svn ls
检索标签(当然,它不会在一个排序的顺序返回),我用一个列表,然后投入使用数组Split()
进行排序,找到最新的一个检查出来建立。 这是所有在VBScript进行。
麻烦的是,作为字符串,版本号不排序数字,但按字母顺序。 给你:
1.0.1
1.0.10
1.0.2
etc
我需要的是:
1.0.1
1.0.2
1.0.10
etc
在.NET中很容易,因为我可以只创建一个List(Of Version)
和排序,但我不能这样做,在VBScript。 我可以创建使用版本类型Set verObj = Create.Object("System.Version")
但是这是它自己没有好处。
我已经通过这里对相关问题的一个很好看,但没有一个是相关的到Windows或VBScript。
如VBScript没有本机排序,你将不得不使用其他技术:使用Javascript / JScript中与合适的排序功能,断开连接的ADO记录集,或带着几分创意格式的.NET的ArrayList。 为了证明最后一个选项:
Dim aTests : aTests = Array( _
"1.0.1" _
, "1.0.10" _
, "1.0.2" _
)
WScript.Echo Join(aTests, vbCrLf)
Dim oFmt : Set oFmt = New cFormat
Dim alVers : Set alVers = CreateObject("System.Collections.ArrayList")
Dim sVers
For Each sVers In aTests
Dim aParts : aParts = Split(sVers, ".")
alVers.Add oFmt.formatArray("{0,4}.{1,4}.{2,4}", aParts)
Next
alVers.Sort
WScript.Echo "---------------"
WScript.Echo Join(alVers.ToArray(), vbCrLf)
WScript.Echo "---------------"
For Each sVers In alVers
WScript.Echo Replace(sVers, " ", "")
Next
输出:
1.0.1
1.0.10
1.0.2
---------------
1. 0. 1
1. 0. 2
1. 0. 10
---------------
1.0.1
1.0.2
1.0.10
从获取cFormat类在这里