Batch | Einen bestimmten Teil einer txt ändern

Palladin007

assimiliert
Guten Tag

Ich habe eine Frage zu dem Befehl for
Und zwar will ich einen Programm-Teil haben, der den Inhalt einer txt-Datei ändern kann.

1. Soll es eine bestimmte Zeile verändern können
2. Soll es eine bestimmte Zeile löschen können.

Das Problem bei der Sache ist dann nur, dass das bei Batch ja nicht so einfach geht.

Wenn ich also mit for eine Zeile finde, und die geändert werden soll, dann muss alles davor und alles danach, nur diese Zeile nicht, in eine neue Datei geschrieben werden. Und diese kleine Zeile, die wird erst geändert und dann geschrieben.


Dazu habe ich folgendes Programm im Internet gefunden:

Code:
@echo off
setLOCAL enabledelayedexpansion
set /p token=Welchen Token? 

set "quell_datei=%pfad%\alt.txt"
set "ziel_datei=%pfad%\neu.txt"
set "suchen_nach=hans mustermann"
set "ersetzen_durch=clara mustermann"

if not defined suchen_nach (ECHO Fehler: Die Variable suchen_nach nicht definiert^^!&goto :EOF)

if exist %ziel_datei% (del /f %ziel_datei% 1>nul 2>nul)

for /f "delims=| tokens=%token%" %%i in ('FINDSTR . "%quell_datei%"') do (set rest=%%j&set zeile=%%i& call :ersetzen !zeile!)
goto :weiter

:ersetzen
set zeile=!zeile:%suchen_nach%=%ersetzen_durch%!
IF [!zeile!] equ [] (echo.>>%ziel_datei%) else (echo !zeile!>>%ziel_datei%)
goto :EOF

:weiter

echo Fertig^^!
pause

verborgener Text:
http://www.supportnet.de/fresh/2007/1/id1481757.asp

PS: Das oben ist nicht das Original-Programm. Ich hab versucht, es an meine Bedürfnisse anzupassen.


Der Inhalt der Datei alt.txt

Code:
asdf |sdgsrg| hans mustermann
hans mustermann| dfgs
asdf |asgasd
asdf |adga| hans mustermann
hans mustermann | srths
asdf |asdgsbd | hans mustermann
adsf | asdfga

Wenn ich das Programm nun starte und bei tokens die 1 eingebe, funktioniert alles, so, wie es soll. Die komplette Datei wird auf veränderte Weise neu geschrieben. Hans wird Clara
Wenn ich 2 oder 3 eingebe, dann wird der jeweile Token brav geschrieben, ABER die Tokens davor nicht.

Ich brauche ein Programm, was in einer txt JEDE Stelle, die man mit Tokens definieren kann, ändern kann und den gesammten Rest so neu schreibt, wie es war.

Wenn ich also 3 eingebe, dann müsste die Ausgabe so aussehen:

Code:
asdf |sdgsrg| clara mustermann
hans mustermann| dfgs
asdf |asgasd
asdf |adga| clara mustermann
hans mustermann | srths
asdf |asdgsbd | clara mustermann
adsf | asdfga

Und nicht anders

Ich bekomme zur Zeit nur das ausgegeben:

Code:
 clara mustermann
 clara mustermann
 clara mustermann

Und das darf nicht sein.


Weiß jemand eine Lösung?
 
Ok, hab jetzt ein Programm gefunden, was MEINE Bedürfnisse erfüllt.

Aber da sind nicht alle Orte nötig zum ändern und es kann auch immer nur eine Stelle ändern.

Werd es noch überarbeiten, damit das DIng vollständig flexibel ist und wirklich alles ändern kann.
 
Oben