0

我正在使用 SVN 和标签来标记版本,每个标签目录都以版本号命名。这一切都很好,但现在我正在使用 Visual Build Pro 自动化这个构建过程。

我正在使用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 中这样做。我可以使用 创建一个 Version 类型Set verObj = Create.Object("System.Version"),但这本身并不好。

我已经很好地浏览了这里的相关问题,但没有一个与 Windows 或 VBScript 相关。

4

1 回答 1

0

由于 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 类

于 2012-05-18T21:35:16.527 回答