【问题标题】:Batch script to search for a particular string in SVN revision file用于在 SVN 修订文件中搜索特定字符串的批处理脚本
【发布时间】:2013-07-07 00:30:20
【问题描述】:

我需要一些有关 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 也可以用于变量)

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

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

附:我还读到过在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 文件,我不会收到此错误

【问题讨论】:

  • 您告诉我们,您已经尝试过什么,但对结果、错误消息等一无所知。
  • @Endoro 好吧,正如我所说,我不知道如何调试批处理脚本。而且由于这是在后台执行的,所以我没有看到命令提示符出现。当我尝试使用echo %REVURL%%REVNO% >> file.txt 写入文件时,未创建文件
  • 可能会创建该文件,但是因为您没有指定 file.txt' you don't know where it's going. Specify a **full path** to file.txt` 的完整路径,并确保您的服务器进程在其下运行的任何帐户都有权写入该路径.
  • @alroc 现在我正在尝试将中间结果保存在文件中,但随后又出现了另一个错误。更新了我的问题

标签: svn batch-file findstr post-commit-hook svnlook


【解决方案1】:

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

post-commit.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
)

revision.bat

svnlook youngest D:\Subversion\...

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

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

【讨论】:

  • start 将调用 Internet Explorer(或任何您的默认 Web 浏览器),这将在某个时候期待一个交互式用户。您对所有将生成但未终止的 iexplore.exe 进程做了什么?
  • @alroc 不需要交互,网站会启动服务来完成所有其余工作。还没有考虑太多流程。我愿意接受所有建议和建议
  • 几周后,您的服务器上将有一堆废弃的 iexplore.exe 进程。您必须在实现这样的脚本之前考虑这一点 如果只需要访问一次 URL 即可触发进程,请使用 wget 或 PowerShell Invoke-WebRequest 之类的东西,它们不会孤立无援流程散落一地。或者找到一种方法来配置 Hudson 以自行监控此更改,而根本不需要挂钩脚本。
  • @alroc 这是一个很好的观点。谢谢你。首要任务是让它正常工作,然后我会考虑像 cURL 或 wget 这样的客户端
  • @alroc bitsadmin 似乎仍可用于 Windows
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
相关资源
最近更新 更多