beginner13lu
Goto Top

Batch-Datei erkennt Zeilennummer in zweiter FOR-Schleife nicht

Liebe Alle,

ich habe eine Batch-Datei erhalten, mit der ich aus einer .txt.-Datei einen Kommentar auslesen möchte. Dieser Kommentar wird immer von den Begriffen "Ergebnisse Systemqualität" und "Fächersummen-Bitmap" umrahmt, d.h. in meinem .txt-File steht so etwas wie:
Ergebnisse Systemqualität
//Kommentar//
//Kommentar//
//Kommentar//
Fächersummen-Bitmap

Nun sollen mithilfe der Batch-Datei diese beiden Ausdrücke gesucht und die zugehörige Zeilennummer ausgegeben werden. Dies erfolgt mit zwei FOR-Schleifen:
for /f "delims=:" %%x in ('findstr /n "Ergebnisse Systemqualität" tempfile.txt') do set lnBeforeComment=%%x  
for /f "delims=:" %%x in ('findstr /n "Fächersummen-Bitmap" tempfile.txt') do set lnAfterComment=%%x  

Anschließend soll das ganze File Zeile für Zeile ausgelesen und als Array gespeichert werden:
set count=0
for /f "tokens=*" %%b in (tempfile.txt) do (  
	set /a count+=1
	set thisLine[!count!]=%%b
)
Als nächstes wird mithilfe von lnBeforeComment und lnAfterComment eine "Start- und Endposition" festgelegt, um den Kommentar zwischen diesen beiden Positionen in einer neuen Variable zu speichern:
set /a myStart=!lnBeforeComment!+1
set /a myEnd=!lnAfterComment!-1

set myComments=x
for /l %%a in (!myStart!,1,!myEnd!) do (
	set myComments=!myComments! !thisLine[%%a]!	
)

set myComments=!myComments:~2!

Das Programm erkennt nun zwar die Zeilennummer, in der "Ergebnisse Systemqualität" steht und übergibt sie wie gewollt an den Parameter lnBeforeComment, leider funktioniert das bei der zweiten FOR-Schleife nicht mehr. Wenn ich mir "lnAfterComment" ausgeben lasse, dann erhalte ich keinen Wert, dementsprechend wird auch "myEnd" nicht definiert.

Ich habe mittlerweile viel ausprobiert, komme aber garnicht weiter. Die Zeilennummern, in denen "Ergebnisse Systemqualität" und "Fächersummen-Bitmap" auftauchen sind oftmals unterschiedlich, da auch die Kommentare unterschiedlich lang sind und sich über mehrere Zeilen erstrecken können.

Könnte mir hierbei evtl jemand helfen? Ich bin auch offen für Optimierungen was den restlichen Code angeht...einiges kann man bestimmt effizienter gestalten.

Vielen Dank schonmal, ich hoffe ich habe alles ausreichend beschrieben!

Content-ID: 7878861879

Url: https://administrator.de/forum/batch-datei-erkennt-zeilennummer-in-zweiter-for-schleife-nicht-7878861879.html

Ausgedruckt am: 19.03.2025 um 08:03 Uhr

7426148943
7426148943 18.07.2023 aktualisiert um 11:01:28 Uhr
Goto Top
Lass den Batch-Unsinn und nimm gleich die PowerShell
[regex]::match((Get-Content "d:\datei.txt" -Raw),'(?ism)Ergebnisse Systemqualität\s*(.*?)Fächersummen-Bitmap').Groups[1].Value.trim()  
https://tio.run/##fU47jgIxFOtzinSTICYjWhoQCCjoQKIBiiw8mIzyGfJeBEgch5twsC ...

Tote sollte man nicht wieder wecken, du kommst in die Hölle 😉.

Wenn du das riskieren willst
@echo off &setlocal
chcp 1252 >nul
:: Eingabedatei
set "fileIN=D:\test.txt"  
:: Ausgabedatei
set "fileOUT=D:\test_out.txt"  
:: Startzeile
for /f "tokens=1 delims=:" %%a in ('findstr /inrc:"Ergebnisse Systemqualit.t" "%fileIN%"') do set /a start=%%a+1  
:: Endzeile
for /f "tokens=1 delims=:" %%a in ('findstr /inrc:"F.chersummen-Bitmap" "%fileIN%"') do set /a end=%%a-1  
:: gewünschte Zeilen in die Ausgabedatei schreiben
>"%fileOUT%" (for /f "tokens=1* delims=:" %%a in ('findstr /n "^" "%fileIN%"') do if %%a GEQ %start% if %%a LEQ %end% echo.%%b)  

Zeppel