3faltigkeit
Goto Top

Batch findstr zwischen zwei Zeilen

Hallo Zusammen,

ich sitze jetzt schon länger und suche eine Lösung.
Also ich habe ein größere Batch, die auch soweit funktioniert, ich bin gerade am Feinschliff und möchte diese "robuster" machen.

Ich schreibe eine Zeile in einer ini-Datei um. Die Zeile beginnt mit "Irgendwas=". Dummerweise gibt es das "Irgendwas=" mehrmals in der ini.

Bisher suche ich die Zeilennummer des Blocks in dem das "Irgendwas=" liegt, der Block wird eingeleitet mit "[connect]". Also suche ich die Zeilennummer von "[connect]" und addiere eine 5 dazu, da das "Irgendwas=" in der 5. Zeile nach "[connect]" steht. Meistens.

Denn das ist an manchem PCs abweichend. Ich weiß aber, dass die Reihenfolge der Blöcke in der ini gleich ist und das
ich das "Irgendwas=" aus dem Block "[connect]" ändern muss.
Nach "[connect]" kommt "[farben]". Jetzt habe ich die Zeilennummer von "[connect]" und "[farben]" bestimmt.

Ziel ist es die Zeilennummer von "irgendwas=" zwischen "[connect]" und "[farben]" in einer Variable zu schreiben.

Und genau da weiß ich nicht weiter, wie ich findstr zwischen einer Start- und einer Endvariablen laufen lassen kann.

Keine Ahnung, ob das mit for /l irgendwie möglich wäre, zumindest gibt es hier die Möglichkeit von Start und Ende - abe rich habe es nicht hin bekommen.
Bei for /f gibt es skip, aber das bezieht sich nur auf den Anfang, es kann also kein Endpunkt für den Ausstieg gesetzt werden.

So ermittle ich Start- und Endzeilennummer (immer 2-Stellig)
for /f "delims=" %%a in ('findstr /n /c:[Settings] C:\ordner\datei.ini') do set Start=%%a
set "StartZeile=%Start:~,2%"

for /f "delims=" %%b in ('findstr /n /c:[Farben] C:\ordner\datei.ini') do set End=%%b
set "EndZeile=%End:~,2%"

Hat jemand eine Idee, wie ich das bewerkstelligen kann?

Besten Dank für die Tipps & viele Grüße

Content-ID: 2425840718

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

Ausgedruckt am: 26.11.2024 um 07:11 Uhr

1915348599
Lösung 1915348599 07.04.2022 aktualisiert um 09:48:03 Uhr
Goto Top
Warum man bei sowas immer noch rum Batch verstehe ich zwar schon seit Jahren nicht mehr aber bidde ...
@echo off &setlocal enabledelayedexpansion
set "found="  
for /f "tokens=1,* delims=:" %%a in ('type "C:\ordner\datei.ini" ^| findstr /n "^"') do (  
	echo.%%b|findstr /ilbc:"[connect]" >nul 2>&1 && set found=1  
	echo.%%b|findstr /ilbc:"irgendwas=" >nul 2>&1 && (if defined found set row=%%a & goto next)  
)
:next
echo Erster Fund in Zeile %row%
3faltigkeit
3faltigkeit 19.04.2022 aktualisiert um 20:24:02 Uhr
Goto Top
Hallo Pretty,
Ich bin am WE erst aus dem Urlaub zurück gekommen und habe die Schleife heute in meine Batch gebastelt.
Es funktioniert wunderbar.

Aber ja, als Batch ist das doch schon eine ganz schöne unhandliche Bastelei.
Das nächste mal werd ich wohl auch lieber zur PowerShell greifen...

Aber besten Dank, das hat mir sehr weiter geholfen.

Viele Grüße & einen schönen Abend!