Batch Löschen einer Zeile

none1

Newbie
Registriert
Jan. 2009
Beiträge
6
Hallo zusammen,
ich habe eine Batch-Datei geschrieben, die mir eine Textdatei reduziert. Alle erforderlichen Dinge werden hier erfolgreich umgesetzt, bei einer Sache stolpere ich jedoch noch.

Es KANN sein, dass die Textdatei in einer oder mehreren Zeilen die Zeichenfolge ARF und/oder AR enthält. Ich möchte gerne diese Zeilen finden und löschen. Auf der Konsole kann ich die Zeilen mit "find" finden, ich weiß sie aber nicht in meiner Batch-Datei zu verarbeiten. Kann mir da wer helfen?

Vielen Dank!


Code:
REM Deaktivierung von Outputs
@echo off


REM Leeren des Screens
cls


REM Zur verzögerten Übersetzung von Variablen.
REM Bewirkt, dass die Variable nicht zur Kompilierzeit sondern erst zur Laufzeit übersetzt wird
REM (setzt die Verwendung von SETLOCAL zur Aktivierung von verzögerter Übersetzung voraus)
setlocal enabledelayedexpansion


REM Definiert die Eingabe- und Ausgabedatei
set "Quelldatei=input.txt"
set "Zieldatei=output.txt"


REM Definiert die zu löschenden Satzzeichen
SET "suchen_nach1= -"
SET "ersetzen_durch1= "


REM Löscht den Inhalt der Ausgabedatei, sofern eine existiert
IF EXIST %Zieldatei% (DEL /f %Zieldatei% 1>NUL 2>NUL)


REM Quell-Datei zeilenweise auslesen
REM und in Variable "zeile" schreiben
FOR /f "delims=" %%i IN ('FINDSTR . "%Quelldatei%"') DO (
SET zeile=%%i& CALL :ersetzen !zeile!
)
GOTO :weiter
:ersetzen


REM innerhalb der Variable "zeile"
REM den Inhalt der Variable "suchen_nach1" suchen
REM und diese durch den Inhalt der Variable "ersetzen_durch1" ersetzen
SET zeile=!zeile:%suchen_nach1%=%ersetzen_durch1%!


REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben
IF [!zeile!] EQU [] (ECHO.>>%Zieldatei%) ELSE (ECHO !zeile!>>%Zieldatei%)
GOTO :eof


REM Weitere Verarbeitung bis zur letzten Zeile
:weiter


REM Löschen der ersten Zeile in der Zieldatei
for %%a in ("%Zieldatei%") DO (
more /e +1 "%%a">"%%a.tmp" 
del "%%a" && ren "%%a.tmp" "%%a"
)


REM Info auf dem Screen über einen erfolgreichen Abschluss
ECHO Erfolgreich!
 
Da sieht man mal, wie intuitiv doch Windows ist, unter Linux ein Befehl:
sed "s/^das loeschen$//g" datei.txt

Vielleicht einfach den sed unter Windows installieren?
 
  • Gefällt mir
Reaktionen: none1
FIND /V "AR" dateiname > ausgabedateiname
 
  • Gefällt mir
Reaktionen: none1
Tut mir leid, da werde ich mich vorhin irgendwo verschrieben haben. Nach einem Copy&Paste deiner Syntax ging es dann auch. Nun weiß ich das aber nicht in meinen Code zu integrieren, dass dieser Parameter mit berücksichtigt wird. Alle Versuche bringen Programmabbrüche oder Fehlermeldungen mit sich. Nach meinem Verständnis gehört das doch in die Zeilen 38-41. Oder?
 
ähm nö? weil du in 38-41 die satzzeichen ersetzen lässt und das nichts mit deinem AR suchen und löschen zu tun hat?!

ergo packst du die syntax ans ende deiner reinen bearbeitung und lässt diq uasi fertige datei dann noch auf diesen AR hin filtern
 
  • Gefällt mir
Reaktionen: none1
Zurück
Oben