Bestimmte TXT-Zeilen mittels Batch ändern?
Hallo Community!
Ich arbeite schon seit längerem an einem Mod zu einer Batch von mir. In einer anderen Frage von mir habe ich sie bereits näher beschrieben.
Nun habe ich das Problem, dass ich eine Text-Datei habe, bei der schon einige Zeilen Chat drinstehen. Ich möchte aber eine bestimmte Zeile davon ändern, ohne die anderen Zeilen dabei zu beschädigen.
Ist so etwas möglich?
Danke schon im Voraus an alle Antworten!
3 Antworten
setlocal enableDelayedExpansion
for /F "tokens=*" %%L in (datei.txt) do (
set /a line += 1
if !line! equ 5 (
echo verändere die Zeile oder lasse sie weg...
) else (
echo.%%L
)
)>>"%TMP%\tmpOutput[%~n0].txt"
del "datei.txt"
copy "%TMP%\tmpOutput[%~n0].txt" "datei.txt"
Beispiel für die Datei datei.txt, vorrausgesetzt du willst eine bestimmte Zeile (hier 5) ändern. Ist das nicht der Fall brauchst du line nicht und kannst zum Beispiel bestimmte Zeichenfolgen ersetzten:
setlocal enableDelayedExpansion
for /F "tokens=*" %%L in (datei.txt) do (
set "line=%%L"
set "line=!line:suchString=ersetzString!"
echo.!line!
)>>"%TMP%\tmpOutput[%~n0].txt"
del "datei.txt"
copy "%TMP%\tmpOutput[%~n0].txt" "datei.txt"
Auch wenn der Thread heir schon älter ist, hoffe ich auf weitere Input's
Mit PS gem. obigem Beispiel funktioniert bestens, Dankeschön!
Statt eine Zeilen Nummer würde ich aber gern an eine bestimmte Position springen und da die Zeile dazwischenschieben (nicht überschreiben)
Hast du mir da auhc ein Tipp?
Im Endausbau müsste ich natürlich dann Prüfen können, gibt es den String schon soll er überschreiben und nicht dazwischen schieben.
Lieben Dank
René
Der Ablauf mit "einfachen" programmtechnischen Mitteln
TXT-Datei öffnen (T1)
eine neue TXT-Datei anlegen (T2)
Schleife: Lese ein Zeile aus T1 bis Dateiende
(1.Fall) ändere sie, schreibe die geänderte Zeile in T2
(2.Fall) ändere sie nicht, schreibe die Zeile in T2
Schleifenende
schliesse T1 und T2
lösche T1
nenne T2 in T1 um (rename)
Wie schon gesagt, in Powershell ziemlich simpel:
# Einlesen der Textdatei
$Text = Get-Content -Path "C:\t1.txt"
# Z.B. ändern der 3. Zeile (Index 2)
$Text[2] = "Neue Zeile..."
# Speichern des neuen Texts
Set-Content -Path "C:\t1.txt" -Value $Text