Batch zum ändern einer Textdatei
Hallo zusammen,
suche hier etwas verzweifelt nach Hilfe, um mit einer Batchdatei eine Textdatei zu durchsuchen und eine Zeile zu ändern.
An und für sich kein Problem, das besorndere scheint nur zu sein, dass der Wert der Variable die gesucht wird ein Gleichheitszeichen beinhaltet.
Etwas genauer:
Ich habe eine Textdatei, die folgendermaßen aufgebaut ist:
Hubert=1
Josef=0
Gerd=0
Inge=1
Walter=1
und so weiter, ingesamt 9 Zeilen.
Nun soll die Batchdatei die Zeilen nach "Hubert=1" durchsuchen und in "Hubert=0" verändert.
Meine bisherigen Versuche sehen so aus:
Das Ergebis liefert dann leider in der ersten Zeile: "1=Hubert=01".
Was mache ich falsch?????
Wenn das nicht gehen sollte, wäre es vielleicht möglich, die Zeile 1 stumpf mit dem vorgegebenen Wert "Hubert=0" austzutauschen, ohne Vergleich und Schleife?
Wenn ich die Batch ein zweites oder dritttes mal laufen lasse, werden die Zeilen in der Ausgabedatei immer unten dran gehangen, so dass die Datei immer größer wird.
Kann man das auch ändern?
Wäre sehr nett, wenn mir hier jemand kurz weiterhelfen könnte!!
[Edit Biber] Codeformatierung. [/Edit]
suche hier etwas verzweifelt nach Hilfe, um mit einer Batchdatei eine Textdatei zu durchsuchen und eine Zeile zu ändern.
An und für sich kein Problem, das besorndere scheint nur zu sein, dass der Wert der Variable die gesucht wird ein Gleichheitszeichen beinhaltet.
Etwas genauer:
Ich habe eine Textdatei, die folgendermaßen aufgebaut ist:
Hubert=1
Josef=0
Gerd=0
Inge=1
Walter=1
und so weiter, ingesamt 9 Zeilen.
Nun soll die Batchdatei die Zeilen nach "Hubert=1" durchsuchen und in "Hubert=0" verändert.
Meine bisherigen Versuche sehen so aus:
REM @ECHO off
SETLOCAL enabledelayedexpansion
SET "quell_datei=C:\data.txt"
SET "ziel_datei=C:\data.txt"
SET "suchen_nach=Hubert=1"
SET "ersetzen_durch=Hubert=0"
REM Ausgabe einer Fehlermeldung und Programmabbruch
REM falls die Variable "suchen_nach" nicht definiert ist
IF NOT DEFINED suchen_nach (ECHO Fehler: Die Variable suchen_nach nicht definiert^^!&GOTO :eof)
REM Loeschen der Ausgabedatei, falls sie (noch) existiert
REM IF EXIST %ziel_datei% (DEL /f %ziel_datei% 1>NUL 2>NUL)
REM Quell-Datei zeilenweise auslesen
REM und in Variable "zeile" schreiben
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO (
SET zeile=%%i& CALL :ersetzen !zeile!
)
GOTO :weiter
:ersetzen
REM innerhalb der Variable "zeile"
REM den Inhalt der Variable "suchen_nach" suchen
REM und diese durch den Inhalt der Variable "ersetzen_durch" ersetzen
SET zeile=!zeile:%suchen_nach%=%ersetzen_durch%!
REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben
IF [!zeile!] EQU (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%)
GOTO :eof
:weiter
REM weitere Verarbeitung
ECHO Fertig^^!
Das Ergebis liefert dann leider in der ersten Zeile: "1=Hubert=01".
Was mache ich falsch?????
Wenn das nicht gehen sollte, wäre es vielleicht möglich, die Zeile 1 stumpf mit dem vorgegebenen Wert "Hubert=0" austzutauschen, ohne Vergleich und Schleife?
Wenn ich die Batch ein zweites oder dritttes mal laufen lasse, werden die Zeilen in der Ausgabedatei immer unten dran gehangen, so dass die Datei immer größer wird.
Kann man das auch ändern?
Wäre sehr nett, wenn mir hier jemand kurz weiterhelfen könnte!!
[Edit Biber] Codeformatierung. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 230296
Url: https://administrator.de/forum/batch-zum-aendern-einer-textdatei-230296.html
Ausgedruckt am: 22.02.2025 um 05:02 Uhr
5 Kommentare
Neuester Kommentar
Hallo weboadmix und willkommen im Forum!
Grüße
bastla
wäre es vielleicht möglich, die Zeile 1 stumpf mit dem vorgegebenen Wert "Hubert=0" austzutauschen
Sollte sich so machen lassen:@echo off & setlocal
SET "quell_datei=C:\data.txt"
SET "ziel_datei=C:\data.txt"
>"%ziel_datei%" echo Hubert=0
>>"%ziel_datei%" more +1 "%quell_datei%"
bastla
Hallo zusammen!
Habe hier ein ähnliches Problem:
Ich versuche, per batch-Datei HTML-Tags aus einer .txt-Datei zu entfernen, habe dazu folgendes Skript kopiert und angepasst.
Das soll später, wenn es grundsätzlich funktioniert um viele weitere Tags erweitert werden, bislang scheint es aber so, als ob das Skript gar nichts tut
und ich habe keine Ahnung wo der Fehler liegen könnte.
hier der Code:
Wäre echt dankbar, wenn mir jemand weiterhelfen könnte ;)
Habe hier ein ähnliches Problem:
Ich versuche, per batch-Datei HTML-Tags aus einer .txt-Datei zu entfernen, habe dazu folgendes Skript kopiert und angepasst.
Das soll später, wenn es grundsätzlich funktioniert um viele weitere Tags erweitert werden, bislang scheint es aber so, als ob das Skript gar nichts tut
und ich habe keine Ahnung wo der Fehler liegen könnte.
hier der Code:
@echo off & setlocal enabledelayedexpansion
set "Datei=D:\Reportbereinigung\Test-Kopie.txt"
set "t=Temp.tmp"
set "Ersetzen="
set "Tag001=<HTML>"
set "Tag002=<TR><TD width="175"> </TD><TD class="value">"
if exist "%t%" del "%t%"
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine
move "%t%" "%Datei%"
goto :WEITER_IM_BATCH
:ProcessLine
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"
if not defined L >>"%t%" echo\& goto :eof
set WriteLine1=!L:%Tag001%=%Ersetzen%!
set WriteLine2=!WriteLine1:%Tag002%=%Ersetzen%!
>>"%t%" echo !WriteLine2!
goto :eof
:WEITER_IM_BATCH
Wäre echt dankbar, wenn mir jemand weiterhelfen könnte ;)
Hallo feadin und willkommen im Forum!
Die Ähnlichkeit Deiner Problemstellung hält sich zwar in Grenzen, aber anyhow: Mit Batch würde ich mir das (wegen der Anführungs- und Sonderzeichen) aber eher nicht antun wollen, sondern eher zu VBS greifen - das könnte dann etwa so gehen:
Die Ersetzung wird hier "in der Datei" vorgenommen, es wird also die Datei unmittelbar (ohne Temporärdatei / Sicherungskopie) verändert.
Kurz zur Erklärung der Zeilen 3 - 6 bzw 8 - 11: Du kannst mehrere Paare von Such- und Ersetzungsbegriffen angeben, wobei außer beim jeweils letzten Eintrag immer ein Komma und ein Unterstrich am Ende der Zeile stehen müssen (Zeilen 4 und 9); nach den letzten Werten (Zeilen 5 und 10) ist kein Komma zu setzen.
Für jeden Suchbegriff muss auch ein Ersetzungsbegriff existieren (auch, wenn wie hier, jeweils durch "Nichts" ersetzt werden soll).
Anführungszeichen, die Bestandteil des Such- oder Ersetzungsbegriffes sind, müssen verdoppelt werden.
Grüße
bastla
Die Ähnlichkeit Deiner Problemstellung hält sich zwar in Grenzen, aber anyhow: Mit Batch würde ich mir das (wegen der Anführungs- und Sonderzeichen) aber eher nicht antun wollen, sondern eher zu VBS greifen - das könnte dann etwa so gehen:
Datei = "D:\Reportbereinigung\Test-Kopie.txt"
Suchen = Array( _
"<HTML>", _
"<TR><TD width=""175""> </TD><TD class=""value"">" _
)
Ersetzen = Array( _
"", _
"" _
)
If UBound(Suchen) > UBound(Ersetzen) Then
WScript.Echo "Zu wenig Ersetzungsbegriffe!"
WScript.Quit
End If
Set fso = CreateObject("Scripting.FileSystemObject")
T = fso.OpenTextFile(Datei).ReadAll
For i = 0 To UBound(Suchen)
T = Replace(T, Suchen(i), Ersetzen(i))
Next
fso.CreateTextFile(Datei).Write T
Kurz zur Erklärung der Zeilen 3 - 6 bzw 8 - 11: Du kannst mehrere Paare von Such- und Ersetzungsbegriffen angeben, wobei außer beim jeweils letzten Eintrag immer ein Komma und ein Unterstrich am Ende der Zeile stehen müssen (Zeilen 4 und 9); nach den letzten Werten (Zeilen 5 und 10) ist kein Komma zu setzen.
Für jeden Suchbegriff muss auch ein Ersetzungsbegriff existieren (auch, wenn wie hier, jeweils durch "Nichts" ersetzt werden soll).
Anführungszeichen, die Bestandteil des Such- oder Ersetzungsbegriffes sind, müssen verdoppelt werden.
Grüße
bastla