使用PowerShell从命令行输出中提取特定值

时间:2011-01-14 01:48:27

标签: svn powershell

问题在于:我想查询subversion以获取存储库的修订号,然后在其名称中创建一个带有修订号的新目录(例如,“Build763”)。

命令“svn info”输出许多由冒号分隔的标签\值对。例如

Path: c#
URL: file:///%5Copdy-doo/Archive%20(H)/Development/CodeRepositories/datmedia/Development/c%23
Repository UUID: b1d03fca-1949-a747-a1a0-046c2429f46a
Revision: 58
Last Changed Rev: 58
Last Changed Date: 2011-01-12 11:36:12 +1000 (Wed, 12 Jan 2011)

这是我当前的代码,它解决了这个问题。有没有办法用更少的代码来做到这一点?我想,使用滚边可以用一两条线做到这一点。我当然不应该使用临时文件。

$RepositoryRoot = "file:///%5Cdat-ftp/Archive%20(H)/Development/CodeRepositories/datmedia"
$BuildBase="/Development/c%23"
$RepositoryPath=$RepositoryRoot + $BuildBase

# Outputing the info into a file
svn info $RepositoryPath | Out-File -FilePath svn_info.txt

$regex = [regex] '^Revision: (\d{1,4})'

foreach($info_line in get-content "svn_info.txt")
    {
        $match = $regex.Match($info_line);
        if($match.Success)
        {
            $revisionNumber = $match.Groups[1];
            break;
        }
    }


"Revision number = " + $revisionNumber;

4 个答案:

答案 0 :(得分:3)

这是一种方式:

    $revisionNumber = svn info $RepositoryPath |
     select-string "^revision" |
      foreach {$_.line.split(":")[1].trim()}

    if ($revisionNumber){"Revision number = " + $revisionNumber

}

答案 1 :(得分:2)

采取mjolinor的建议,我终于选择了:

$revisionNumber = (svn info $RepositoryPath | select-string '^Revision: (\d+)$').Matches[0].Groups[1].Value

酷!一行代码。 (写了两个小时,但是嘿)

答案 2 :(得分:2)

对于它的价值,你可以使用ConvertFrom-Property String

答案 3 :(得分:0)

如果您可以创建和使用URL(WC)的工作副本,则可以

  • svnversion WC:将输出干净数量的WC-revision

    > svnversion trunk

    34

  • 使用SubWCRrev将带有SubWCRrev-keywords的模板文件转换为带有RevNo的bat文件(subwcrev WC tpl-file bat-file),在需要的位置替换(在mkdir选项内)并调用结果bat执行操作< / LI>