PDA

Visualizza la versione completa : (batch) Estrarre righe multiple da un file log


sisma77
15-04-2013, 13:25
Salve a tutti,
Sto creando un batch che estragga gli errori da un file di log ma sono fermo.
in pratica riesco ad intercettare la stringa di errore con questo:
@echo off
setLocal EnableDelayedExpansion
set SORGENTE=%systemdrive%\log.txt
set DESTINAZIONE=%systemdrive%\Errori.txt
find /I "CPSE0152E" %sorgente% >>%DESTINAZIONE%

Ma ho bisogno di catturare anche le 2 linee successive

08.14.22 - CPSE0152E 08.14.47 IS-0001 SS-BSS SSU-BSS SE-NODUMP OPR-UFA0001
08.14.22 - 010000A TRC-ZSC3
08.14.22 - ZSC3 OBJ-zsc3 00000308 LOADSET-BASE

Potete aiutarmi?

MItaly
15-04-2013, 13:46
Non mi risulta che FIND abbia opzioni del genere, io installerei uno qualunque dei porting di grep per Windows (a quel punto basta l'opzione -A 2).

sisma77
16-04-2013, 07:46
Purtroppo sono vincolato dalle severe policy di sicurezza che stanno sulla macchina, dovrei riuscire a fare tutto tramite un batch.. il comando find puņ risolvermi il problema se correttamente combinato ad altri, come per esempio findstr che cerca la stringa e passandogli dei parametri di inizio ^ e fine..MA COME SI FA?? BOH! stamattina mi ci dedico un altro po

MItaly
16-04-2013, 16:38
Se findstr supporta le regex multilinea potresti provare con una regex del tipo


^.*stringadacercare.*$^.*$^.*$

ma non credo che funzioni. In alternativa forse si puņ usare una qualche combinazione di for, set e find per analizzare una riga alla volta il file e mostrare le tre righe successive, ma sarebbe una soluzione ingarbugliata e per nulla elegante (come tutto in batch, peraltro).

Di nuovo, secondo me fai prima ad usare un porting di grep (che non richiede installazione, basta piazzare l'eseguibile nella stessa directory del batch e fine), o in alternativa potresti usare VBScript.

Loading