2

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

目前,它将所有文件检出到一个文件夹,然后迭代该文件夹,将所有文件添加到主文件作为构建过程的一部分。就像是:

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

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

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

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

4

2 回答 2

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.

有两个想法是否将其作为一个新问题开始,现在我已将此标记为已回答...无论如何,所有帮助都非常感激

于 2009-12-07T20:33:57.653 回答
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
于 2009-12-07T10:30:09.573 回答