Bestimmte TXT-Zeilen mittels Batch ändern?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
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)

Shensei  29.10.2018, 10:48

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

3