Simples usando o JREPL.BAT - um utilitário JScript / batch híbrido que executa a pesquisa de expressões regulares e substitua no texto . O JREPL.BAT é um script puro que é executado nativamente em qualquer máquina Windows do XP.
Solução 1 fazendo parte do trabalho com JREPL e alguns com lote:
@echo off
setlocal disableDelayedExpansion
set n=0
for /f delims^=^ eol^= %%A in (
'jrepl "<start:\q(.*?):\qalt>" $1 /x /jmatch /f test.txt'
) do (
set /a n+=1
set "ln=%%A"
setlocal enableDelayedExpansion
>file_!n!.txt echo(!ln!
endlocal
)
Solução 2 fazendo todo o trabalho com JREPL usando uma variável em lote para o código JScript:
@echo off
setlocal disableDelayedExpansion
:: Define beg variable to hold JScript code
:: It is actually one line with line continuation to make it easier to read.
set beg=^
var n=0;^
function write(txt){^
var fso=new ActiveXObject('Scripting.FileSystemObject');^
var out=fso.OpenTextFile('file_'+(++n)+'.txt',2,true);^
out.WriteLine(txt);^
out.close();^
return false;^
}
call jrepl "<start:\q(.*?):\qalt>" "write($1)" /x /jmatch /jbeg="%beg%" /f test.txt
Solução 3 fazendo todo o trabalho com o JREPL usando um arquivo externo contendo código JSCRIPT:
arquivo chamado write.jrepl
var n=0;
function write(txt){
var fso=new ActiveXObject('Scripting.FileSystemObject');
var out=fso.OpenTextFile('file_'+(++n)+'.txt',2,true);
out.WriteLine(txt);
out.close();
return false;
}
linha de comando (não é necessário lote)
jrepl "<start:\q(.*?):\qalt>" "write($1)" /x /jmatch /jlib=write.jrepl /f test.txt
=============================================== =====
Atualização para eliminar novas linhas indesejadas
O que se segue é a Solução 1 modificada para primeiro eliminar os retornos de carro e as novas linhas. Isso pode ser adaptado para as soluções 2 e 3.
@echo off
setlocal disableDelayedExpansion
set n=0
for /f delims^=^ eol^= %%A in (
'jrepl "[\r\n]" "" /m /f test.log^|jrepl "<start:\q(.*?):\qalt>" $1 /x /jmatch'
) do (
set /a n+=1
set "ln=%%A"
setlocal enableDelayedExpansion
>file_!n!.txt echo(!ln!
endlocal
)