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-Key: 2425840718

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

Printed on: April 27, 2024 at 16:04 o'clock

Mitglied: 1915348599
Solution 1915348599 Apr 07, 2022 updated at 07:48:03 (UTC)
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%
Member: 3faltigkeit
3faltigkeit Apr 19, 2022 updated at 18:24:02 (UTC)
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!