Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于在SVN修订文件中搜索特定字符串的批处理脚本_Svn_Batch File_Findstr_Post Commit Hook_Svnlook - Fatal编程技术网

用于在SVN修订文件中搜索特定字符串的批处理脚本

用于在SVN修订文件中搜索特定字符串的批处理脚本,svn,batch-file,findstr,post-commit-hook,svnlook,Svn,Batch File,Findstr,Post Commit Hook,Svnlook,我需要一些有关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 %

我需要一些有关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
)
我为什么要这样做:

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

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

在我的脚本中,我使用了:

  • 变量的串联(这可能是错误的),因为我不确定是否可以将变量附加到路径
  • findstr
    查找文件是否包含字符串(我知道findstr也可以用于变量)
如果我的小脚本有语义问题和语法问题,我不会感到惊讶,因为正如我已经提到的,我以前没有做过那么多的批处理脚本

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

另外,我还读到,在提交后使用超重过程不是一个好主意,因为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
)
在revision.bat中:

svnlook youngest D:\Subversion\...
现在我在SVN中得到了这个错误:

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

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

找到了一种方法—将中间函数存储在.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
)
修订版.bat

svnlook youngest D:\Subversion\...
在我看来,这是一个解决办法,而不是一个解决办法


感谢:

您告诉了我们您尝试了什么,但没有告诉我们结果、错误消息等。@endro嗯,正如我所说,我不知道如何调试批处理脚本。由于这是在后台执行的,我看不到命令提示符出现。当我尝试使用
echo%REVURL%%REVNO%%>>file.txt写入文件时,文件不会被创建。文件可能会被创建,但因为您没有指定
file.txt'的完整路径,所以您不知道它要去哪里。指定到
file.txt`的**完整路径**,并确保服务器进程运行的任何帐户都具有写入该路径的权限。@alroc现在我正试图将中间结果保存到文件中,但随后我遇到另一个错误。更新后的“我的问题”
start
将调用Internet Explorer(或您的默认web浏览器),它将在某个时刻期待一个交互式用户。您对所有将生成但未终止的iexplore.exe进程做了什么?@alroc无需交互,网站启动服务,完成所有剩余工作。还没有考虑太多的过程。我愿意接受所有的建议和建议在这几周之后,你的服务器上会有一堆废弃的iexplore.exe进程。在实现这样一个脚本之前,您必须考虑这一点。如果触发一个进程只需要访问一次URL,那么可以使用类似于
wget
或PowerShell
Invoke WebRequest
的方法,这样就不会留下孤立的进程。或者找到一种方法,将Hudson配置为独立监视此更改,而不需要任何钩子脚本。@alroc这是一个很好的观点。非常感谢。首先要让它正常工作,然后我会考虑像cURL或client这样的客户端wget@alrocbitsadmin似乎仍然适用于Windows