从外部文件批量增量

时间:2013-01-21 09:44:24

标签: batch-file cmd

我有一个脚本在SVN中创建新标签,并添加一些文件。我想自动完成这个任务,所以我想找到一些方法自动增加标签名称的增量,从1.0到X.0。

我想到了一个conf文件,它将包含“1.0”作为第一个版本号,并且每次调用脚本时都会覆盖。但不确定我是否可以从文件中获取“1.0”值,然后在我的脚本中对其进行增量。

任何帮助都会非常感激。

提前致谢

3 个答案:

答案 0 :(得分:2)

使用autoprops查看Subversion中的关键字。

首先,设置subversion以兑现关键字扩展

enable-auto-props = yes

[auto-props]
version.txt = svn:keywords=Revision

然后,设置一个简单的文件,让我们用$ revision $关键字和一些随机内容称它为version.txt

$revision$
Random content

然后,在批处理文件中,使用新的随机内容重新创建version.txt文件

echo $revision$ >version.txt
echo %random% %date% %time% >>version.txt

并在每次运行批处理文件时检入此新文件,因此它将变为

$revision 32 $
4214 Mon 21/01/2013 15:53:27,62 

这样,subversion将保留批处理文件所有运行的准确版本号,即使在多个客户端同时也是如此。

然后,您可以从version.txt中提取并使用代码类似于

的修订号
for /f "tokens=1,2" %%a in (version.txt) do (
   if %%a==$revision (
     echo Revision number is %%b
     echo do something with %%b, create %%b tag or whatever
   )
)

答案 1 :(得分:2)

不要创建种子配置文件。相反,如果文件不存在,请将批处理脚本默认为1.0。

@echo off
setlocal
set "conf=version.conf"
if not exist "%conf%" (set version=1.0) else (
  for /f "usebackq delims=." %%N in ("%conf%") do set /a version=%%N+1
)
set "version=%version%.0"
(echo %version%)>"%conf%"

我假设你永远不会多次并行运行这个过程 - 如果你并行运行它可能会失败。可以进行修改以锁定conf文件,以便在需要时可以并行运行。有关详细信息,请参阅how to check in command line if given file or directory is locked, that it is used by a process?的已接听答案。

答案 2 :(得分:1)

由于您没有说出您想要使用的语言,因此只能给出一般性评论:

当然可以维护一个小的“版本”文件,其中包含“ dottet版本号”,类似0.2.6。任何进程都可以读取该文件内容。您应该实现一些方法集合,将该内容拆分为其数字标记(主要版本和次要版本等)。这些数值可以由您喜欢使用的任何数学函数处理。例如,您可以递增它们。另一种方法是一些' implode '函数,它接受数字标记并再次创建' dottet版本号'(现在可能是0.2.7 ...)和最后,您可以将该信息写回文件中。允许一个控制版本的哪个部分应该递增的参数当然是有意义的。

这种方案效率不高,但往往足够。

请注意,只有在您可以保证访问该版本文件时始终只有一个进程时,此方法才有效。否则,多个进程可能会覆盖彼此的结果,这肯定会导致问题。

作为替代方案,也许是一个更优雅的替代方案,您可以考虑将subversion存储库本身视为您的版本号的种子存储:而不是读取特殊文件内容(如果该文件被删除或其他事情发生了怎么办?)make对subversion中的tags文件夹的请求。它应包含所有以前标记的版本。这正是您想要的信息。获取所有版本号,对它们进行排序,取最高版本并按上述方法处理。