Bachtdatei: Textdatei nach String durchsuchen und Zeile unter String in Variable speichern
Hallo zusammen,
habe vermutlich folgendes (vermutlich zimlich simpel aber ich komme nicht drauf) Problem:
ich habe eine Textdatei die folgendermaßen aufgebaut ist:
HalliiHallooo
Wie gehts den so
gesuchterString
123456789
mir geht es sehr gut
und selbst
ich möchte also nach dem String "gesuchterString" in der Datei suchen und die Zeile darunter(die Zahlenfolge: "123456789") in einer Variable abspeichern.
Vielleicht kann mir ja einer helfen, danke im voraus.
Grüße...
habe vermutlich folgendes (vermutlich zimlich simpel aber ich komme nicht drauf) Problem:
ich habe eine Textdatei die folgendermaßen aufgebaut ist:
HalliiHallooo
Wie gehts den so
gesuchterString
123456789
mir geht es sehr gut
und selbst
ich möchte also nach dem String "gesuchterString" in der Datei suchen und die Zeile darunter(die Zahlenfolge: "123456789") in einer Variable abspeichern.
Vielleicht kann mir ja einer helfen, danke im voraus.
Grüße...
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 487155
Url: https://administrator.de/forum/bachtdatei-textdatei-nach-string-durchsuchen-und-zeile-unter-string-in-variable-speichern-487155.html
Ausgedruckt am: 23.04.2025 um 05:04 Uhr
6 Kommentare
Neuester Kommentar

Für sowas einfaches nimmt man heute eigentlich gleich die Powershell.
Wenn man unbedingt will kann man Powershell auch in einer Batch verwenden
Plain Batch geht auch, aber mal ehrlich wer macht sowas damit heute noch?
$variable = Select-String -Path 'D:\test.txt' -Pattern "gesuchterString" -SimpleMatch -Context 1 | select -Expand Context | select -Expand PostContext
$variable
@echo off
chcp 1252
set "datei=D:\test.txt"
for /f "delims=" %%a in ('powershell -Executionpolicy Bypass -NoP -C "Select-String -Path '%datei%' -Pattern 'gesuchterString' -SimpleMatch -Context 1 | select -Expand Context | select -Expand PostContext"') do set "variable=%%a"
echo %variable%
@echo off &setlocal
chcp 1252
set "datei=D:\test.txt"
set "found="
for /f "usebackq delims=" %%a in ("%datei%") DO (
if not defined found (
echo %%a|findstr /ilc:"gesuchterString" >nul 2>&1 && (set found=1)
) else (
set "variable=%%a"
goto next
)
)
:next
echo %variable%

Welche Variante??
Und wie sieht die Textdatei in wirklichkeit aus? Suchworte mit Umlauten? Vielleicht Textdatei UTF oder Unicode kodiert? In dem Fall nutze gleich die Powershell-Varianten.
Und wie sieht die Textdatei in wirklichkeit aus? Suchworte mit Umlauten? Vielleicht Textdatei UTF oder Unicode kodiert? In dem Fall nutze gleich die Powershell-Varianten.

Moin moin,
Mit der richtigen Reihenfolge brauchen die Parameter keine Namen,
an Stelle von mehrfachen Select-Object -ExpandProperty kann man den . Property dereference operator nutzen
Mit Hilfe von Aliasen und möglichen Abkürzungen geht dann dies (auch wenn's kryptisch aussieht:kann ja gewünscht sein)
Zitat von @140777:
Für sowas einfaches nimmt man heute eigentlich gleich die Powershell.
Für sowas einfaches nimmt man heute eigentlich gleich die Powershell.
> $variable = Select-String -Path 'D:\test.txt' -Pattern "gesuchterString" -SimpleMatch -Context 1 | select -Expand Context | select -Expand PostContext
> $variable
>
Mit der richtigen Reihenfolge brauchen die Parameter keine Namen,
an Stelle von mehrfachen Select-Object -ExpandProperty kann man den . Property dereference operator nutzen
Mit Hilfe von Aliasen und möglichen Abkürzungen geht dann dies (auch wenn's kryptisch aussieht:kann ja gewünscht sein)
$Variable=(sls 'gesuchterstring' .\test.txt -Sim -Cont 1).Context.PostContext

Mit der richtigen Reihenfolge brauchen die Parameter keine Namen,
Nur versteht dann ein Anfänger nicht mehr die Bohne. Gut wenn man's in seinen eigenen Skripten nutzt OK nur wenn man das ganze öffentlich postet sollte man doch bitte immer die ausführliche Variante bevorzugen, nicht umsonst wird das immer wieder gepredigt.Ein Skript das man Monate später wieder anpackt und dann in einer eher Variante vorfindet was vielleicht auch jemand anderes erst mal "entschlüsseln" muss, trägt auch nicht gerade zu einer effektiven Zusammenarbeit bei.
an Stelle von mehrfachen Select-Object -ExpandProperty kann man den . Property dereference operator nutzen
Jupp kann man, ist aber bei diversen Befehlen keine gute Idee und läuft gerne mal auf Fehler wenn die Klammer kein passendes Ergebnis sondern null liefert, dann beschwert sich die Shell natürlich darüber daß null keine Eigenschaften hat, was bei der Pipevariante kein Problem ist da einfach kein Objekt über die Pipe wandert.Was cool aussieht muss nicht unbedingt immer vorteilhaft sein.
Hat alles seine Vor- und Nachteile (•‿•), aber darum ist die Powershell ja so beliebt, jeder wählt seine passende Variante. Nur öffentlich doch bitte für den Laien entzifferbar sonst trägt das nur zum Frust der Anfänger bei.