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-ID: 229497

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

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

bastla
bastla 12.02.2014 aktualisiert um 10:40:41 Uhr
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
Saintwolf
Saintwolf 18.02.2014 aktualisiert um 13:34:01 Uhr
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.
bastla
bastla 18.02.2014 um 15:35:19 Uhr
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
Saintwolf
Saintwolf 18.02.2014 um 15:49:18 Uhr
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.
bastla
Lösung bastla 18.02.2014, aktualisiert am 19.02.2014 um 15:35:50 Uhr
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