1

我需要一些有关 Windows 批处理脚本的帮助

我想达到什么目的:

  • 从存储库中检索最年轻(最后)的修订
  • 在该文件中搜索特定字符串
  • 如果字符串存在,则加载网页

我试过的:

set REVNO=$(svnlook youngest D:\Subversion\...)
set REVURL=D:\Subversion\...\db\revprops\0\
findstr /m "string_I_am_searching_for" %REVURL%%REVNO%
if %errorlevel%==0 (
  start http://webpage
)

我为什么要这样做:

我想在消息中包含特定字符串的提交后启动 Hudson CI 自动测试(例如Autobuild: true

我无法调试我的代码,因为我不熟悉 Windows 批处理脚本

在我的脚本中,我使用了

  • 变量的串联(可能是错误的),因为我不确定是否可以将变量附加到路径
  • findstr查找文件是否包含字符串(我知道 findstr 也可以用于变量)

如果我的小脚本有语义问题和句法问题,我不会感到惊讶,因为正如我已经提到的,我之前没有做过那么多的批处理脚本

我没有要求,没有规范,所以脚本可以以任何可能的方式实现。所以我愿意接受建议

PS我还读到过使用超重程序post-commit不是一个好主意,因为svn在完成所有操作之前不会将控件返回给用户->这不是一个大问题

编辑: 我通过测试发现我并没有真正获得最年轻的修订号,而是使用了命令字符串。所以在谷歌搜索了一下之后,我发现在 Windows 中调用一些命令并将结果存储在变量中并不容易。所以我决定使用文件来存储中间结果。

这是我尝试过的:

cd D:\Subversion\...\hooks
SET OUTPUT=testing
FOR /F "tokens=*" %a in ('revision.bat') do ( SET OUTPUT=%a )
findstr /m "o" D:\Subversion\...\db\revprops\0\%a
if %errorlevel%==0 (
  start http://webpage
)

在修订版.bat 中:

svnlook youngest D:\Subversion\...

现在我在 SVN 中得到这个错误:

post-commit hook failed (exit code 255) with output:
a" ) was unexpected at this time.

我相信这是因为我a在错误的时间在错误的地方创建了变量。但是如果我手动运行 bat 文件,我不会收到此错误

4

1 回答 1

0

找到了一种方法 - 将中间函数存储在 .bat 文件中:

提交后.bat

@ECHO OFF
cd D:\Subversion\...\hooks
SET OUTPUT
FOR /F "tokens=*" %%a in ('revision.bat') do ( SET OUTPUT=%%a )
findstr /m "o" D:\Subversion\...\db\revprops\0\%OUTPUT%
if %errorlevel%==0 (
  start http://website
)

修订版.bat

svnlook youngest D:\Subversion\...

在我看来,这是一种解决方法而不是解决方案

感谢:https ://serverfault.com/questions/245679/store-output-of-windows-command-in-batch-file

于 2013-07-09T13:17:50.603 回答