【发布时间】: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** tofile.txt` 的完整路径,并确保您的服务器进程在其下运行的任何帐户都有权写入该路径. -
@alroc 现在我正在尝试将中间结果保存在文件中,但随后又出现了另一个错误。更新了我的问题
标签: svn batch-file findstr post-commit-hook svnlook