svn update:我可以迭代结果吗?

时间:2009-12-07 10:21:14

标签: svn windows-scripting

我在脚本中使用svn(Windows脚本.cmd文件)。

目前,它会将所有文件签出到文件夹,然后迭代该文件夹,将所有文件添加到主文件中,作为构建过程的一部分。类似的东西:

svn checkout --username %username% %SVNURL% %workingfolder%
FOR %%i IN (%workingfolder%\*.*) DO TYPE %%i >> %DESTFILE%

在初始构建之后我想要为构建生成一个“更改”文件,只包含自上次构建以来已更改的文件。

我可以使用svn update 命令而不是checkout,这给了我一个正在更新的文件列表。 svn update Reference (svnbook.red-bean.com)

我想要做的是从svn更新中迭代这个结果列表,在工作文件夹中找到这些文件并将它们复制到更改文件中。

2 个答案:

答案 0 :(得分:0)

您可以非常轻松地找到更新的文件:

svn up | findstr /r /c:"^U"

您可以使用for命令迭代它的输出:

for /f "tokens=2* delims= " %%x in ('svn up ^| findstr /r /c:"^U"') do copy "%%x" change

答案 1 :(得分:0)

对于回答我自己的问题道歉,这也只是一个部分答案,但它是我目前所处的位置。

首先,空格的问题不仅仅在于%SVNExecutable%中的文件路径,问题在于命令中的空格。

解决此问题的方法(适用于Windows XP)是使用 usebackq 开关,并使用后引号`而不是正常引号。使用这个,我设法让svn update命令工作:

for /f "usebackq tokens=2* delims= " %%x in (`%SVNExecutable%svn up --username %username% %SVNURL% %workfolder%`) do ECHO "%%x"

这更新了测试文件,并从初始更新结果:

U    full\path\to\file\file.sql
Updated to revision 36793.
Summary of conflicts:
Skipped paths: 1

这会产生以下结果:

"full\path\to\file\file.sql"
"to"
"of"
"paths:"

我无法工作的最后一块拼图是带有正则表达式的findstr。当我重新添加它并试试这个:

for /f "usebackq tokens=2* delims= " %%x in (`%SVNExecutable%svn up --username %username% %SVNURL% %workfolder% ^| findstr /r /c:"^U"`) do ECHO "%%x"

我收到此错误:

The filename, directory name, or volume label syntax is incorrect.

我是否想知道是否现在将这个作为一个新问题开始我已将此标记为已回答...无论如何,所有帮助都感激不尽