schloth
Goto Top

In allen Textdateien eines bestimmten Pfades die Zeilen x bis Ende löschen

Hallo zusammen,

ich möchte für alle Textdateien, die unter einem bestimmten Pfad (z.B. Z:\Test\) abgelegt sind, nur die ersten x Zeilen behalten und alle Zeilen >x löschen. Es wäre schön, wenn auch Textdateien in Unterordnern berücksicktigt werden. Dies ist aber nicht zwingend erforderlich.
Es sollen die Originaltextdateien (z.B. Datei35.txt) und die gekürzten Textdateien (z.B. Datei35_gekürzt.txt) gespeichert werden.

Im Forum habe ich bereits ein Skript gefunden, das eine Textdatei wie gewünscht kürzt:
@echo off & setlocal
set "InFile=Z:\Test\Datei35.txt"  
set "OutFile=Z:\Test\Datei35_gekürzt.txt"  
set /a LineToDeleteFrom=100

if exist "%OutFile%" del "%OutFile%"  
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%InFile%"') do if %%i lss %LineToDeleteFrom% if "%%j"=="" (echo.>>"%OutFile%") else echo %%j>>"%OutFile%"  

Bisher hatte ich leider noch nie etwas mit Batch zu tun und bekomme es leider nicht hin, das Batch auf mehrere Textdateien anzuwenden.

Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte.

Viele Grüße
Schloth

Content-Key: 332880

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

Printed on: April 23, 2024 at 20:04 o'clock

Member: rubberman
Solution rubberman Mar 22, 2017 updated at 18:32:15 (UTC)
Goto Top
Hallo Schloth.

Wenn die Zeilen in den Dateien eine Länge von 1021 Zeichen nicht überschreiten, könnte es so funktionieren:
@echo off &setlocal

set "x=5"  

for /r %%i in (*.txt) do (
  set "file=%%~dpni"  
  setlocal EnableDelayedExpansion
  <"!file!.txt" >"!file!_gekuerzt.txt" (  
    for /f %%j in ('type "!file!.txt"^|find /c /v ""') do if %%j geq %x% for /l %%k in (2 1 %x%) do (  
      set "line=" &set /p "line="  
      echo(!line!
    )
  )
  endlocal
)
Grüße
rubberman
Member: Schloth
Schloth Mar 28, 2017 at 14:33:59 (UTC)
Goto Top
Super. Funktioniert.

Vielen vielen Dank!!!

Entschuldigung, dass ich mich erst so spät melde