Как удалить перенос строки по условию в bat файле

Коллеги, приветствую! Есть текстовый файл со строками вида:

00:00.741004-1,DBMSSQL,5,p:processName=QQQ,t:computerName=SRV,t:connectID=144493,Usr=Расписание,dbpid=66,Sql='INSERT INTO dbo._InfoRg43436 (_Fld43437RRef,_Fld43438,_Fld43439) VALUES(?,?,?)',Context='
МодульСеанса : 7 : ПолныеПрава.УстановитьПараметрыМеханизмаОграниченияПравДоступа();
    ОбщийМодуль.ПолныеПрава.Модуль : 710 : Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь());
        ОбщийМодуль.Пользователи.Модуль : 15 : Возврат ПользователиКлиентСервер.АвторизованныйПользователь();
            ОбщийМодуль.ПользователиКлиентСервер.Модуль : 22 : Возврат ПараметрыСеанса.ТекущийПользователь;
00:01.148006-1,DBMSSQL,5,p:processName=QQQ,t:computerName=SR,t:connectID=144494,Usr=Расписание189,dbpid=66,Sql='DELETE FROM T1
FROM dbo._InfoRg43436 T1
WHERE T1._Fld43437RRef = ? AND T1._Fld43438 = ? AND T1._Fld43439 = ?
p_0: 0xA9A4F8F21E2B439D11EAA92A9F1C4FDE
p_1: 5673N
p_2: 40200608130000
',Context='
МодульСеанса : 7 : ПолныеПрава.УстановитьПараметрыМеханизмаОграниченияПравДоступа();'

Необходимо сделать так, что если строка начинается по шаблону рег. выражения \d\d:\d\d.\d+- то строки стоящие после нее и не подходящие под этот шаблон должны переносится на эту строку с определенным разделителем, например таким "|". Или если перефразировать, если строка не подходит под регулярку, то перенести ее на предыдущую строку поставив перед ней символ "|". В моем примере должно получиться следующее:

00:00.741004-1,DBMSSQL,5,p:processName=QQQ,t:computerName=SRV,t:connectID=144493,Usr=Расписание,dbpid=66,Sql='INSERT INTO dbo._InfoRg43436 (_Fld43437RRef,_Fld43438,_Fld43439) VALUES(?,?,?)',Context='|МодульСеанса : 7 : ПолныеПрава.УстановитьПараметрыМеханизмаОграниченияПравДоступа();|   ОбщийМодуль.ПолныеПрава.Модуль : 710 : Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь());|        ОбщийМодуль.Пользователи.Модуль : 15 : Возврат ПользователиКлиентСервер.АвторизованныйПользователь();|          ОбщийМодуль.ПользователиКлиентСервер.Модуль : 22 : Возврат ПараметрыСеанса.ТекущийПользователь;'
00:01.148006-1,DBMSSQL,5,p:processName=QQQ,t:computerName=SR,t:connectID=144494,Usr=Расписание189,dbpid=66,Sql='DELETE FROM T1|FROM dbo._InfoRg43436 T1|WHERE T1._Fld43437RRef = ? AND T1._Fld43438 = ? AND T1._Fld43439 = ?|p_0: 0xA9A4F8F21E2B439D11EAA92A9F1C4FDE|p_1: 5673N|p_2: 40200608130000|',Context='|МодульСеанса : 7 : ПолныеПрава.УстановитьПараметрыМеханизмаОграниченияПравДоступа();'

Ответы (2 шт):

Автор решения: Akina

[ join.vbs ]

Const ForReading = 1, ForWriting = 2    
Const SourceFileName = "c:\tmp\src.txt"
Const DestinationFileName = "c:\tmp\dst.txt"
Const Pattern = "\|(\d\d:\d\d.\d+-)"
Const Replacement = vbNewLine & "$1"

Set fso = CreateObject("Scripting.FileSystemObject")
Set regEx = New RegExp

Set SRCfile = fso.OpenTextFile(SourceFileName, ForReading)
Set DSTfile = fso.OpenTextFile(DestinationFileName, ForWriting, True)

regEx.Pattern = Pattern

DSTfile.Write regEx.Replace(Replace(SRCfile.ReadAll, vbNewLine, "|"), Replacement)

SRCfile.Close
DSTfile.Close
→ Ссылка
Автор решения: andreynikus

В итоге навоял следующее

Const SourceFileName = "c:\1\1\20060813.log"
Const DestinationFileName = "c:\1\1\20060813_4.log"
Const Pattern = "^\d\d:\d\d.\d"
Set regEx = New RegExp

regEx.Pattern = Pattern
Set objStream = CreateObject("ADODB.Stream")
objStream.Charset = "utf-8"
objStream.Type = 2
objStream.Open
objStream.LoadFromFile SourceFileName

Set objStream2 = CreateObject("ADODB.Stream")
objStream2.Charset = "utf-8"
objStream2.Type = 2
objStream2.Open

str0 = ""
Do Until objStream.EOS
    str1 = objStream.ReadText(-2)
    if regEx.Test(str1) then 
        objStream2.WriteText str0, 1
        str0 = str1
        else
        str0 = str0 & "|" & str1 
    end if
Loop

if str0 <> str1 then objStream2.WriteText str0, 1

objStream2.SaveToFile DestinationFileName

objStream.Close
objStream2.Close
→ Ссылка