我得到了一个脚本,但是需要对其进行修改,以便读取分隔符之间的3行Subversion更新" ---------"。
因此,如果我们搜索文本或修订版号或Jira ID,脚本将返回在具有" ---------的行之间/之前和之后的所有3行的完整SVN更新。 - "作为分离。
@echo off
setlocal enableDelayedExpansion
:: Define LF to contain a line feed character (0x0A)
set ^"LF=^
^" The above empty line is critical - DO NOT REMOVE
:: Define CR to contain a carriage return character (0x0D)
for /f %%A in ('copy /Z "%~dpf0" nul') do set "CR=%%A"
:: Define the string to search for
set "s=%~1"
svn log https://subversion.company.com/svn/company-dev/|findstr /ri
/c:"!s!" /c:"!lf!.*!s!" /c:"!lf!.*!cr!*!lf!.*!s!" /c
:"!lf!.*!cr!*!lf!.*!cr!*!lf!.*!s!"
输出通常是这样的:
-------------------------------------------------------------------------------------------------------------------------
r132536 | USERID | 2014-05-06 15:20:06 -0700 (Tue, 06 May 2014) | 2 lines
Interim checkin - use part rev from as worked item if exists
AERO ID: AERO-1107
-------------------------------------------------------------------------------------------------------------------------
因此,如果在" -----"之间找到任何文字。在" ---- "
之间打印该文字答案 0 :(得分:0)
这应该可以解决问题。显然,将subversion.log
替换为您的文件名。它输出到名为output.log
的文件。
@echo off
setLocal enableDelayedExpansion
set v=0
for /f "delims=" %%a in (subversion.log) do (
set a=%%a
if !v!==1 (if "!a:~0,4!"=="----" (set v=0) else echo %%a>>output.log) else (
if !v!==0 if "!a:~0,4!"=="----" (set v=1))
)
答案 1 :(得分:0)
这是一个简单的解决方案,它依赖于hybrid batch/JScript utility called REPL.BAT执行正则表达式搜索并替换stdin并将结果写入stdout。 REPL.BAT是纯脚本,可以在任何现代Windows机器上运行,从XP开始。完整的文档嵌入在脚本中。
此解决方案可避免创建任何临时文件,并且速度相当快,尤其是当您的计算机具有多个处理器或核心时。
@echo off
(echo(&svn log https://sub.mycompany.com/svn/company-dev/)|repl \r?\n \r mx|repl (\r-*\r) $1\n x|findstr /ic:%1|repl \r \r\n x
上面的代码使用了一系列管道命令。在下面的解释中,\ r表示回车符(0x0D),\ n表示换行符(0x0A)
1)回显一个空行,然后是SVN的输出。开头的空白行是为了确保正确解析开口分隔线。
2)用单个\ r替换所有换行符(\ r \ n或\ n)。内容现在由一条长连续线组成,\ r \ n表示新线的位置。
3)将\ n附加到每个部分分隔符。现在每行有一个部分。
4)使用FINDSTR保留包含搜索字符串的部分,并将其余部分丢弃。
5)用\ r \ n替换未与\ n配对的所有\ r \ n。找到的部分现在恢复原状。
更新以回应评论
哎哟!您需要解析大量数据。如果您希望坚持使用本机脚本功能,那么我认为您需要自定义VBScript,JScript或PowerShell解决方案。
但是,如果您能够下载并使用第三方实用程序,那么我认为pcregrep.exe可以提供帮助。它有一个-M
选项,支持多行正则表达式搜索。
svn log https://sub.mycompany.com/svn/company-dev/ | pcregrep -M "^--*\n([\s\S](?!^--*$))*%~1([\s|\S](?!^--*$))*"