saintwolf
Goto Top

Text von zeile mit wort, bis ziele mit wort

suche eine Batch die eine txt auswertet

inhalt:

text a
text b
text c
Fehler
fehler in KB4568792
text d
Fehler
fehler in KB5464121

jetzt möchte ich gerne das der Text von Wort Fehler bis zum 2ten Fehler in eine neue txt Datei geschrieben wird.
Es soll nur der erste Fehler in eine neue Datei der danach wird nicht benötigt.
dabei können wie dazwischen liegenden zeilen variabel sein mal mehr und mal weniger.


hoffe es kann mir jemand helfen.

Content-Key: 229497

Url: https://administrator.de/contentid/229497

Printed on: April 19, 2024 at 05:04 o'clock

Member: bastla
bastla Feb 12, 2014 updated at 09:40:41 (UTC)
Goto Top
Hallo Saintwolf!

Der folgende Ansatz schreibt alle Zeilen zwischen den ersten beiden "Fehler"-Zeilen (genauer: zwischen den ersten beiden Zeilen, die mit "Fehler" beginnen) in die Ausgabedatei:
@echo off & setlocal
set "Ein=D:\Fehlerprotokoll.txt"  
set "Aus=D:\FehlerEinzel.txt"  
set "Suchwort=Fehler"  

set "Von="  
set "Bis="  
for /f "delims=:" %%i in ('findstr /nbc:"%Suchwort%" "%Ein%"') do (  
    if not defined Von (
        set /a Von=%%i
    ) else (
        if defined Von if not defined Bis set /a Bis=%%i
    )
)
if not defined Von (echo "%Suchwort%" nicht gefunden! & pause & goto :eof)  
if not defined Bis (
    >"%Aus%" more +%Von% "%Ein%"  
    goto :eof
)
del "%Aus%" 2>nul  
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ein%"') do (  
    if %%i gtr %Von% if %%i lss %Bis% (
        set "Zeile=%%j"  
        setlocal enabledelayedexpansion
        >>"%Aus%" echo(!Zeile!  
        endlocal
    )
)
Grüße
bastla
Member: Saintwolf
Saintwolf Feb 18, 2014 updated at 12:34:01 (UTC)
Goto Top
set "Suchwort=Fehler"
set "Suchwort2=Neustart"

set "Von="
set "Bis="
for /f "delims= " %%i in ('findstr /nb "%Suchwort2%" "%Ein%"') do (
if not defined Von (
set /a Von=%%i
echo %Von%
) else (
for /f "delims=:" %%k in ('findstr /nb "%Suchwort%" "%Ein%"') do (
if defined Von if not defined Bis set /a Bis=%%k
echo %Bis%
)

wollte das ganze nun nach 2 versiedenen wörtern aufbauen aber geht nicht so recht

die log hat den inhalt:

.
.
Es wurde ein Neustart durchgeführt ! Alte ..\log\2014-02-18\64\win7_sp1_hp_x64_uk.prc\integrate_upd.log wurde gelöscht
.
.

Tool zur Imageverwaltung fr die Bereitstellung
Version: 6.3.9600.16384

Abbildversion: 6.1.7600.16385

Processing 1 of 1 - E:\W7\64\upd\Windows6.0-KB956250-x64.msu: Unable to find the Unattend.xml file in the expanded .msu package.
Error: 0x80070032

Fehler: 50


wollte das di Batch wenn was Wort Fehler nicht 2mal vorhanden ist er den text von Neustart bis Fehler nimmt.

das vom Wort Fehler bis Fehler geht.
Member: bastla
bastla Feb 18, 2014 at 14:35:19 (UTC)
Goto Top
Hallo Saintwolf!

Wenn ich das richtig verstanden habe, sollte es genügen, die (Leer-)Zeile 5 durch
for /f %%i in ('find /i "%Suchwort%"<"%Ein%"') do set /a Anzahl=%%i  
if %Anzahl% leq 1 set "Suchwort=Neustart"  
zu ersetzen - es sei denn, "Neustart'" würde mehr als einmal vorkommen ...

Grüße
bastla
Member: Saintwolf
Saintwolf Feb 18, 2014 at 14:49:18 (UTC)
Goto Top
Zitat von @bastla:

Hallo Saintwolf!

Wenn ich das richtig verstanden habe, sollte es genügen, die (Leer-)Zeile 5 durch
for /f %%i in ('find /i "%Suchwort%"<"%Ein%"') do set /a Anzahl=%%i  
> if %Anzahl% leq 1 set "Suchwort=Neustart"  
> 
zu ersetzen - es sei denn, "Neustart'" würde mehr als einmal vorkommen ...

Grüße
bastla

geht nicht so recht

er soll wenn Fehler nicht 2mal vorkommt dann vom Zeile "Neustart" bis Zeile "Fehler"

müsste ich da nicht ein schwenk auf 2 Suchwörter machen ? komm da nicht weiter.

als vorlage hab ich den ersten Script genommen.
Member: bastla
Solution bastla Feb 18, 2014, updated at Feb 19, 2014 at 14:35:50 (UTC)
Goto Top
Hallo Saintwolf!

Sorry - hatte nicht genau genug gelesen face-sad ...

Versuch es damit:
@echo off & setlocal
set "Ein=D:\Fehlerprotokoll.txt"  
set "Aus=D:\FehlerEinzel.txt"  
set "SuchwortVon=Fehler"  
set "SuchwortBis=Fehler"  

for /f %%i in ('find /i "%SuchwortVon%"<"%Ein%"') do set /a Anzahl=%%i  
if %Anzahl% leq 1 set "SuchwortVon=Neustart"  

set "Von="  
set "Bis="  
for /f "delims=:" %%i in ('findstr /nbc:"%SuchwortVon%" "%Ein%"') do if not defined Von set /a Von=%%i  
if not defined Von (echo "%SuchwortVon%" nicht gefunden! & pause & goto :eof)  
for /f "delims=:" %%i in ('findstr /nbc:"%SuchwortBis%" "%Ein%"') do if not defined Bis if %Von% neq %%i set /a Bis=%%i  
if not defined Bis (
    >"%Aus%" more +%Von% "%Ein%"  
    goto :eof
)
del "%Aus%" 2>nul  
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Ein%"') do (  
    if %%i gtr %Von% if %%i lss %Bis% (
        set "Zeile=%%j"  
        setlocal enabledelayedexpansion
        >>"%Aus%" echo(!Zeile!  
        endlocal
    )
)
Grüße
bastla