karniggel
Goto Top

Zeile in einer Textdatei finden und ersetzen

Hallo,

habe mich bereits schon durch andere Beispiele durchgesucht, bekomme aber meine Datei nicht zum Laufen;
ich hoffe Ihr könnt mir schnell helfen:

Ich möchte in einer Textdatei test.txt eine Zeile, die mit den 4 Zeichen "OBJP" beginnt durch einen anderen Text ersetzen,
hier meine Versuche:

@echo off
for /f "delims=" %%i in (test.txt) do call :block "%%i"
goto :eof

:block
set "a=%CD%"
set "zzz=%~1"
set "z=%zzz:~0,4%"
if %z% EQU "OBJP" echo "OBJP "%a% >> xxx.txt
if %z% NEQ "OBJP" echo %zzz% >> xxx.txt

Leider wird die Zeile nicht ersetzt !?

Vielen Dank schon im Voraus.

Content-Key: 95583

Url: https://administrator.de/contentid/95583

Printed on: April 26, 2024 at 03:04 o'clock

Member: bastla
bastla Aug 28, 2008 at 22:51:25 (UTC)
Goto Top
Hallo karniggel!

Vielleicht geht's so besser:
@echo off & setlocal
for /f "delims=" %%i in (test.txt) do call :block "%%i"  
goto :eof

:block
set "a=%CD%"  
set "zzz=%~1"  
set "z=%zzz:~0,4%"  
if "%z%" EQU "OBJP" echo OBJP %a% >> xxx.txt  
if "%z%" NEQ "OBJP" echo %zzz% >> xxx.txt  
Grüße
bastla

[Edit] @Biber: Schön, dass Du wieder da bist face-smile- aber, von wegen Rechtsüberholer - Abkürzungsbenutzer! face-wink [/Edit]
Member: Biber
Biber Aug 28, 2008 at 23:04:58 (UTC)
Goto Top
Moin karniggel,

willkommen im Forum.

Drei Grundregeln solltest Du beim Bätchen beachten:
  • immer mit "@echo off & setlocal" beginnen, wenn Du selbst Variablen per SET definierst
  • beim Vergleichen immer Äpfel mit Äpfeln und Birnen mit Birnen vergleichen, niemals mischen
  • niemals, wirklich niemals im Bereich "Batch & Shell" schreiben: "Vielen Dank schon im Voraus"

Okay, die Verletzung der ersten und dritten Grundregel hatte im konkreten Fall keine nachhaltigen Auswirkungen, aber der Regel-2-Verstoss hat Dich reingerissen.

if %z% EQU "OBJP" echo ...
-->Selbst wenn in %z% die 4 Zeichen OBJP stehen würden, wäre der Vergleich
if OBJP EQU "OBJP" ...
...niemals erfolgreich.

Immer beiderseits eines == oder EQU oder NEQ....-Vergleichs die Werte in die gleichen Begrenzer setzen.
Das müssen keine Anführungszeichen sein, es ginge auch ein
if [%z%] EQU [OBJP} ....

Grüße
Biber
[Edit] Biber grüßt alle altbekannten und geschätzten Rechtsüberholer! *g [/Edit]
Member: karniggel
karniggel Aug 29, 2008 at 09:41:59 (UTC)
Goto Top
Vielen Dank euch beiden,
die Datei läuft super !

Habe noch ein kleines Problem - wahrscheinlich mit der echo-Ausgabe,
diese fügt am Ende jeder Zeile noch ein Leerzeichen an.
Wie bekomme ich das noch weg?
Member: bastla
bastla Aug 29, 2008 at 09:52:24 (UTC)
Goto Top
Hallo karniggel!

ZB so:
if "%z%" EQU "OBJP" >>xxx.txt echo OBJP %a%  
if "%z%" NEQ "OBJP" >>xxx.txt echo %zzz%  
Achte dabei darauf, dass sich nicht am Ende der Zeile noch ein Leerzeichen befindet ...

Alternativ zu der gezeigten Schreibweise könnte es auch genügen, das Leerzeichen zwischen der Variable und den Umleitungszeichen (also hier: %a% >>) zu entfernen.

Grüße
bastla
Member: karniggel
karniggel Aug 29, 2008 at 10:07:51 (UTC)
Goto Top
Klappt hervorragend,
vielen vielen Dank !!!

Grüße
karniggel