Batch file 从外部文件批量递增

Batch file 从外部文件批量递增,batch-file,cmd,Batch File,Cmd,我有一个脚本,在SVN中创建新标记,并添加一些文件。我想自动完成这项任务,所以我想找到一些方法来自动增加标记名,从1.0增加到X.0 我想到了一个conf文件,它包含“1.0”作为第一个版本号,并且在每次调用脚本时都会被覆盖。但我不确定是否可以从文件中获取“1.0”值,然后在脚本中对其进行增量 任何帮助都将不胜感激 提前感谢因为您没有说您想使用的语言,只能给出一般性的评论: 当然,可以维护一个包含“dottet版本号”的小“版本”文件,比如0.2.6maybe。任何进程都可以读取文件内容。您应该

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

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

任何帮助都将不胜感激


提前感谢

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

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

这样的计划并不真正有效,但通常已经足够了

请注意,只有当您能够保证访问该版本文件始终只有一个进程时,这种方法才会起作用。否则,多个进程可能会相互覆盖结果,这肯定是问题的原因之一


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

因为你没有说你想用什么语言,所以只能给出一般性的评论:

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

这样的计划并不真正有效,但通常已经足够了

请注意,只有当您能够保证访问该版本文件始终只有一个进程时,这种方法才会起作用。否则,多个进程可能会相互覆盖结果,这肯定是问题的原因之一


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

使用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
   )
)

看看使用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.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文件,以便在需要时可以并行运行。有关详细信息,请参阅的已接受答案。

不要创建种子配置文件。相反,如果文件不存在,则让批处理脚本默认为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文件,以便在需要时可以并行运行。有关更多信息,请参阅的已接受答案。

谢谢您的帮助