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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 2425840718
Url: https://administrator.de/contentid/2425840718
Ausgedruckt am: 26.11.2024 um 07:11 Uhr
2 Kommentare
Neuester Kommentar
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%