chgs2011
Goto Top

TXT-Datei nach Begriffen durchsuchen, ganze Zeile löschen und in neue TXT-Datei schreiben

Hallo,

ich habe eine lange TXT-Datei mit Parametern und Werten.

Mit Hilfe einer Vergleichsliste für ungültige Parameter, wollte ich nun die TXT-Datei bereinigen.
Bedeutet, Zeilen mit einem solchen Parameter sollen vollständig gelöscht werden, zur Sicherung aber in eine separate neue TXT-Datei geschrieben werden.

Als Ansatz habe ich diese Version verwendet:
@echo off &setlocal

REM Datei, die du verarbeiten willst:
set "file=parameterliste.txt"  
set "parameter=ungueltig.txt"  


set "tmpfile=%file%_BEREINIGT"  
setlocal EnableDelayedExpansion
<"!file!" >"!tmpfile!" (  
  for /f %%i in ('type "!file!"^|find /c /v ""') do for /l %%j in (1 1 %%i) do (  
    set "line=" &set /p"line="  
    set "found="  
    if defined line (
      for /f "usebackq tokens=1-2 delims=;" %%k in ("%parameter%") do (  
        if "!line!" neq "!line:%%~k=!" set "found=1"  
      )
      if not defined found echo(!line!
    ) else (
      echo (
    )
  )
)
move /y "!tmpfile!" "!file!"  

Die TXT-Datei wird bereinigt und bereits als Backup angelegt,
mir fehlt aber die zweite TXT-Datei mit den gelöschten Zeilen.

Kann mir jemand helfen?

Content-Key: 397177

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

Printed on: April 18, 2024 at 14:04 o'clock

Member: rubberman
rubberman Jan 04, 2019 at 11:15:32 (UTC)
Goto Top
Ungetestet:
@echo off &setlocal

REM Datei, die du verarbeiten willst:
set "file=parameterliste.txt"  
set "parameter=ungueltig.txt"  
set "out=datei2.txt"  


set "tmpfile=%file%_BEREINIGT"  
setlocal EnableDelayedExpansion
<"!file!" >"!tmpfile!" 3>"!out!" (  
  for /f %%i in ('type "!file!"^|find /c /v ""') do for /l %%j in (1 1 %%i) do (  
    set "line=" &set /p"line="  
    set "found="  
    if defined line (
      for /f "usebackq tokens=1-2 delims=;" %%k in ("%parameter%") do (  
        if "!line!" neq "!line:%%~k=!" set "found=1"  
      )
      if not defined found (
        echo(!line!
      ) else (
        >&3 echo(!line!
      )
    ) else (
      echo(
    )
  )
)
move /y "!tmpfile!" "!file!"  
Steffen