Erste und letzte Zeile in großen Dateien schnell löschen
Hallo,
ich bekomme täglich mehrere Dateien welche importiert werden sollen.
In allen Dateien muss die erste und letzte Zeile gelöscht werden.
Nach dem Inhalt kann man nicht suchen, da er keine Schlagwörter oder ähnliches beinhaltet.
Eine fast perfekte Lösung habe ich hier gefunden: erste 6 Zeilen und letzte löschen
Allerdings bricht der Befehl "More +1 TEST.DAT >..\TEMP\TEST.DAT" ab, falls die Datei mehr als 65535 Zeilen beinhaltet.
Der erste Beitrag (siehe Link!) funktioniert zwar bei den großen Dateien, ist aber zu langsam für die vielen Dateien.
Gibt es eine Möglichkeit "more" mit mehr als 65.535 Zeilen zu nutzen?
Oder gibt es eine gute Alternative?
Viele Grüße
Stefan
ich bekomme täglich mehrere Dateien welche importiert werden sollen.
In allen Dateien muss die erste und letzte Zeile gelöscht werden.
Nach dem Inhalt kann man nicht suchen, da er keine Schlagwörter oder ähnliches beinhaltet.
Eine fast perfekte Lösung habe ich hier gefunden: erste 6 Zeilen und letzte löschen
Allerdings bricht der Befehl "More +1 TEST.DAT >..\TEMP\TEST.DAT" ab, falls die Datei mehr als 65535 Zeilen beinhaltet.
Der erste Beitrag (siehe Link!) funktioniert zwar bei den großen Dateien, ist aber zu langsam für die vielen Dateien.
Gibt es eine Möglichkeit "more" mit mehr als 65.535 Zeilen zu nutzen?
Oder gibt es eine gute Alternative?
Viele Grüße
Stefan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 179600
Url: https://administrator.de/contentid/179600
Ausgedruckt am: 15.11.2024 um 03:11 Uhr
7 Kommentare
Neuester Kommentar
Hallo StefanK007!
Ob die folgende Alternative gut ist, müsstest Du testen :
Grüße
bastla
Ob die folgende Alternative gut ist, müsstest Du testen :
@echo off & setlocal
set "Ein=D:\Viele Zeilen.txt"
set "Aus=D:\Etwas weniger Zeilen.txt"
set R=%temp%\Reduziere.vbs
>%R% echo Set fso=CreateObject("Scripting.FileSystemObject"):T=Split(fso.OpenTextFile("%Ein%").ReadAll,vbCrLf):T(0)=""
>>%R% echo L=UBound(T):If T(L)="" Then T(L-1)="":Else:T(L)="":End If:TR=Join(T,vbCrLf):fso.CreateTextFile("%Aus%").Write Mid(TR,3,Len(TR)-4)
cscript //nologo %R%
bastla
Hallo,
Du könntest auch in die Unix/Linux-Trickkiste greifen und den SED verwenden.
SED for Windows unter: http://gnuwin32.sourceforge.net/packages/sed.htm
Dann sollte ein
type TEST.DAT | sed "1d;\$d" > TEST2.DAT
reichen.
Du könntest auch in die Unix/Linux-Trickkiste greifen und den SED verwenden.
SED for Windows unter: http://gnuwin32.sourceforge.net/packages/sed.htm
Dann sollte ein
type TEST.DAT | sed "1d;\$d" > TEST2.DAT
reichen.
Hallo StefanK007,
ich kann Dir aus meiner Erfahrung heraus nur empfehlen für (sehr) große Dateien die mit Bordmitteln verarbeitet werden sollen VBS zu verwenden. Der Unterschied kann schnell im Bereich von mehreren Minuten liegen.
Ich musste z.B. mal in einer Datei (ca. 1- 1,5 GB mit über 1 Mio. Datensätzen) täglich die erste Stelle in jedem Datensatz von 0 auf 2 ändern. Mein Batch lag bei ca. 30 Minuten und das entsprechende VBS bei ca. 30 Sekunden (oder drunter) wenn ich mich recht erinnere. Daher verwende das für Dich entwickelte VBS oder eben bastlas "Batch".
Gruß icsat
ich kann Dir aus meiner Erfahrung heraus nur empfehlen für (sehr) große Dateien die mit Bordmitteln verarbeitet werden sollen VBS zu verwenden. Der Unterschied kann schnell im Bereich von mehreren Minuten liegen.
Ich musste z.B. mal in einer Datei (ca. 1- 1,5 GB mit über 1 Mio. Datensätzen) täglich die erste Stelle in jedem Datensatz von 0 auf 2 ändern. Mein Batch lag bei ca. 30 Minuten und das entsprechende VBS bei ca. 30 Sekunden (oder drunter) wenn ich mich recht erinnere. Daher verwende das für Dich entwickelte VBS oder eben bastlas "Batch".
Gruß icsat
moin,
in native Batch hmm eventuell so
Gruß Phil
in native Batch hmm eventuell so
@echo off &setlocal
if "%~1" == "" echo Syntaxfehler. >&2 &echo Dateien zum Bearbeiten dem Batch uebergeben &pause &goto :eof
:nochmal
set "Zeile="
findstr /n "^" %1>"%temp%\TMP1"
setlocal enabledelayedexpansion
(
for /f "skip=1usebackq delims=" %%i in ("%temp%\TMP1") do (if defined Zeile echo(!Zeile:*:=!
endlocal
set "Zeile=%%i"
setlocal enabledelayedexpansion
)
)>"%~dpn1-Neu-%~x1"
endlocal
if "%~2" == "" goto :eof
shift
goto :nochmal
Gruß Phil