【问题标题】:svn update: can I iterate the results?svn update:我可以迭代结果吗?
【发布时间】:2009-12-07 10:21:14
【问题描述】:

我在脚本中使用 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 更新中迭代这个结果列表,在工作文件夹中找到这些文件并将它们复制到更改文件中。

【问题讨论】:

  • 我很困惑;您需要通过svn update 或结帐来执行此操作吗?如果它是更新的,正如你所说,你可以得到列表并用它做你想做的事情(我不知道在 DOS 中如何,但是......)这就是你要问的:如何在 DOS 中做?或者一般如何获取列表?
  • 是的,我想如何在 DOS 中做是我的问题,很抱歉造成混淆

标签: svn windows-scripting


【解决方案1】:

您可以很容易地找到更新的文件:

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

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

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

【讨论】:

  • 谢谢,已经阅读了那里使用的所有命令,目前正试图让它工作:for /f "tokens=2* delims= " %%x in ('%SVNExecutable%svn up --username user.name %SVNURL% %procsfolder% ^| findstr /r /c:"^U"') do ECHO %%x 问题是 %SVNExecutable% 在路径(程序文件)中包含一个空格,所以这个错误('C:\Program' 无法识别 ....)。尝试了 %SVNExecutable% 周围的 cmets 但这不起作用......我认为你的答案是正确的,所以谢谢,任何进一步的帮助都非常感激:我怎样才能逃离这个空间?
  • 引用copy 的参数就足够了。对不起,我忘了他们。不过,现在无法在此处使用带空格的文件名进行测试,但 for 语句应该可以正常工作。
【解决方案2】:

很抱歉回答我自己的问题,这也只是部分答案,但这是我目前所处的位置。

首先,空格的问题不仅仅在于 %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.

现在我已经将这个问题标记为已回答......无论如何,所有帮助都非常感激

【讨论】:

    猜你喜欢
    • 2014-07-10
    • 2021-08-23
    • 2011-06-29
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多