Text suchen und Folgezeile ausgeben
Hallo,
ich möchte aus einer Text-Datei eine Zeichenfolge suchen lassen und einen Teil der Folgezeile ausgeben.
In der Textdatei steht beispielsweise:
[text1]
path=c:\ordner1\unterordner
[text2]
path=d:\ordner2\
Ich möchte nun gerne nach [text1] suchen lassen und den Pfad c:\oderner1\unterordner ausgeben lassen. Der Suchtext steht nicht unbedingt an erster Stelle, wie in diesem Beispiel.
Habe es mit einer FOR-Schleife und mit FINDSTR versucht, aber leider kenne ich mich zu wenig mit diesen Befehlen aus.
Danke schon mal vorab!
Gruß
Bitbutcher1
ich möchte aus einer Text-Datei eine Zeichenfolge suchen lassen und einen Teil der Folgezeile ausgeben.
In der Textdatei steht beispielsweise:
[text1]
path=c:\ordner1\unterordner
[text2]
path=d:\ordner2\
Ich möchte nun gerne nach [text1] suchen lassen und den Pfad c:\oderner1\unterordner ausgeben lassen. Der Suchtext steht nicht unbedingt an erster Stelle, wie in diesem Beispiel.
Habe es mit einer FOR-Schleife und mit FINDSTR versucht, aber leider kenne ich mich zu wenig mit diesen Befehlen aus.
Danke schon mal vorab!
Gruß
Bitbutcher1
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 102488
Url: https://administrator.de/contentid/102488
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
23 Kommentare
Neuester Kommentar
Moin Bitbutcher1,
das solltest Du mit diesen beiden Zeilen am CMD-Prompt hinbekomen:
Ausgabe:
Mimik:
Deine Ini-Datei ist bei mir %temp%\bb.ini. Anpassen bitte.
1. Zeile - Zeilennummer der Zeile, die "text1" enthält, in Variable %theNextLine% merken (und gleich 1 addieren)
2. Zeile - jetzt nochmal die Ini-Datei durchflöhen, aber umgekehrt: nur (Zeile+1) rausfieseln.
Und die ganze Zeile in %Linetext% speichern (hier nur mit "echo set" statt "set" angedeutet.
Wenn Du auch zum richtigen Ergebnis kommst, dann im Batch alle %i durch %%i und %j durch %%j ersetzen.
Grüße
Biber
das solltest Du mit diesen beiden Zeilen am CMD-Prompt hinbekomen:
for /f "delims=:" %i in ('findstr /i /n "text1" %temp%\bb.ini') do @set /a theNextline=%i +1>nul
for /f "delims=: tokens=1,*" %i in ('findstr /i /n $ %temp%\bb.ini^|findstr "^%theNextLine%"') do @echo set "lineText=%j"
set "lineText=path=c:\ordner1\unterordner"
Mimik:
Deine Ini-Datei ist bei mir %temp%\bb.ini. Anpassen bitte.
1. Zeile - Zeilennummer der Zeile, die "text1" enthält, in Variable %theNextLine% merken (und gleich 1 addieren)
2. Zeile - jetzt nochmal die Ini-Datei durchflöhen, aber umgekehrt: nur (Zeile+1) rausfieseln.
Und die ganze Zeile in %Linetext% speichern (hier nur mit "echo set" statt "set" angedeutet.
Wenn Du auch zum richtigen Ergebnis kommst, dann im Batch alle %i durch %%i und %j durch %%j ersetzen.
Grüße
Biber
Moin Bitbutcher1,
deshlab war ja mein Vorschlag
-> Spiel die beiden Zeilen erstmal "trocken", am CMD-Prompt durch.
Denn dort kannst Du ja erstmal sehen, was das Ergebis des einen oder des anderen schrittes wäre.
Vermutung:
Und, wie geschrieben, erst trocken am CMD-Prompt testen, dannch in einen batch gießen.
Grüße
Biber
deshlab war ja mein Vorschlag
Wenn Du auch zum richtigen Ergebnis kommst, dann im Batch alle %i durch %%i und %j durch %%j ersetzen.
-> Spiel die beiden Zeilen erstmal "trocken", am CMD-Prompt durch.
Denn dort kannst Du ja erstmal sehen, was das Ergebis des einen oder des anderen schrittes wäre.
Vermutung:
- Falls der Pfad zur test.cfg auch Leerzeichen enthält, dann setze diesen ganzen Pfad+Dateiname auch in Anführungszeichen.
- und ersetze in der zweiten Zeile das "@echo set linetext=%%i" durch ein "set linetext=%%i" (das war ja am CMD nur "angedeutet, s.o.)
- was eventuell im Batch eine Verdoppelung werden müsten, ist in der zweiten Zeile das Caret ("^" ) bei
... findstr "^thenextLine%"
Damit (mit dem FindStr-Parameter ^=Caret ) wollte ich ja nur am Zeilenanfang siuchen, aber das ändere Bitte in.. findstr /B "thenextLine%:"
Und, wie geschrieben, erst trocken am CMD-Prompt testen, dannch in einen batch gießen.
Grüße
Biber
Moin Butbitcher1,
da bin ich auch etwas ratlos jetzt - ich habe es auch auf XP angetestet:
Ich bekomme also zumindest am CMD-Prompt das, was ich erwartet habe.
Da müssen wir mal einen moment warten, bis bastla diesen thread entdeckt... der hat einen geübteren Blick für solche Denkfehler.
Ich komme erst heute abend dazu, das noch mal in Ruhe anzuschauen, sorry.
Grüße
Biber
da bin ich auch etwas ratlos jetzt - ich habe es auch auf XP angetestet:
(=16:58:04 D:\temp=)
>type %temp%\bb.ini
In der Textdatei steht beispielsweise:
[text1]
path=c:\ordner1\unterordner
[text2]
path=d:\ordner2\
(=16:58:50 D:\temp=)
>for /f "delims=:" %i in ('findstr /i /n "text1" %temp%\bb.ini') do @set /a theNextline=%i +1>nul
(=16:59:15 D:\temp=)
>set the
theNextline=3
(=16:59:24 D:\temp=)
>for /f "delims=: tokens=1,*" %i in ('findstr /i /n $ %temp%\bb.ini^|findstr "^%theNextLine%"') do @echo set "lineText=%j"
set "lineText=path=c:\ordner1\unterordner"
### die andere FindStr-Variante: geht genauso:
>for /f "delims=: tokens=1,*" %i in ('findstr /i /n $ %temp%\bb.ini^|findstr /b "%theNextLine%:"') do @echo set "lineText=%j"
set "lineText=path=c:\ordner1\unterordner"
Ich bekomme also zumindest am CMD-Prompt das, was ich erwartet habe.
Da müssen wir mal einen moment warten, bis bastla diesen thread entdeckt... der hat einen geübteren Blick für solche Denkfehler.
Ich komme erst heute abend dazu, das noch mal in Ruhe anzuschauen, sorry.
Grüße
Biber
Hallo Bitbutcher1!
Die schlechte Nachricht (für Dich, nicht für Biber ): Die beiden von Dir (leider nicht als ) geposteten CMD-Zeilen tun bei mir, was sie sollen - für die Testdatei
erhalte ich nach Ausführung beider Zeilen folgende Ausgabe:
Fehlerursachen bei Dir könnten sein:
Du solltest daher zunächst einmal die Suche testen:
müsste als Ergebnis eine Zeile der Art
bringen.
Grüße
bastla
Die schlechte Nachricht (für Dich, nicht für Biber ): Die beiden von Dir (leider nicht als ) geposteten CMD-Zeilen tun bei mir, was sie sollen - für die Testdatei
[text1]
path=c:\ordner1\unterordner
[mit TMWin]
path=c:\ordner3\unterordner
[text2]
path=d:\ordner2\
set "lineText=path=c:\ordner3\unterordner"
- Falscher Pfad zur "install.cfg" - solltest Du bereits bemerkt haben, wenn die Datei an diesem Ort nicht zu finden ist, da "findstr" eine Fehlermeldung ausgibt; die Möglichkeit, dass verschiedene "install.cfg" vorhanden wären und der Pfad zu falschen Version zeigt, sollte ja eigentlich auszuschließen sein.
- Falsche Angabe des Suchbegriffes (Groß-/Kleinschreibung als Ursache fällt aus, da diese bei der Suche [siehe "/i"] ignoriert wird - um das zu demonstrieren, habe ich bei meinem Test die Schreibweise variiert); darunter fiele auch ein "Nicht-ASCII/ANSI"-Format der "install.cfg".
Du solltest daher zunächst einmal die Suche testen:
findstr /i /n "tmwin" c:\programme\elv\tmwin\einstellungen\install.cfg
3:[mit TMWin]
Grüße
bastla
Hallo Bitbutcher1!
Könntest Du den Inhalt der "test.cfg" posten, und dabei die Tags (jeweils ohne die Leerzeichen an der 2. Stelle)
vor der ersten Zeile und
nach der letzten Zeile verwenden?
Grüße
bastla
Ist demnach in Ordnung, oder?
Mitnichten - die Zeilen 2 und 4 enthalten den Suchbegriff nicht und dürften daher auch nicht ausgegeben werden.Könntest Du den Inhalt der "test.cfg" posten, und dabei die Tags (jeweils ohne die Leerzeichen an der 2. Stelle)
< code type="plain">
< /code>
Grüße
bastla
Hallo Bitbutcher1!
Schaut doch gut aus - die Variable %theNextline% erhält ja die Zeilennummer der gesuchten Zeile, nämlich 1 + 1 = 2
Jetzt nur noch
und das sollte es gewesen sein ...
Grüße
bastla
Schaut doch gut aus - die Variable %theNextline% erhält ja die Zeilennummer der gesuchten Zeile, nämlich 1 + 1 = 2
Jetzt nur noch
for /f "delims=: tokens=1,*" %i in ('findstr /i /n $ c:\programme\elv\tmwin\einstellungen\install.cfg^|findstr /b "%theNextline%:"') do @echo set "lineText=%j"
Grüße
bastla
Hallo Bitbutcher1!
Soferne die Zeile immer noch den Aufbau
hat, ist das nicht nachvollziehbar - getrennt wird bei ":" und "=" (falls das von Dir durch "delims=:=" angegeben wurde), sodass folgende Token entstehen müssten:
Token 1 = Zeilennummer (im Beispiel: 2)
Token 2 = "Path"
Token 3 = Rest der Zeile (nach dem "=" hinter "Path")
Grüße
bastla
Soferne die Zeile immer noch den Aufbau
Path=c:\ordner\unterordner\
Token 1 = Zeilennummer (im Beispiel: 2)
Token 2 = "Path"
Token 3 = Rest der Zeile (nach dem "=" hinter "Path")
Grüße
bastla