Batch textdatei die - letzten letzte zeilen zeile - löschen
HALLO
ich hab schon viel gesucht
und einiges gefunden
aber bei mir ist es so das ich bein einer textdatei per batch nur die letzten zeilen löschen will
ab zeile 5 oder 7.
nur die letzten !!
oder bestimmte
wie wird das ausgeführt ?
1. ab zeile 5 alles löschen
2. eine bestimmte zeile löschen z.b zeile 7
_____
BTW:
kennt jemand eine gute seite (kostenlos) wo alle befehle batch/cmd (windows XP)
aufgeführt werden ?
aber wirklich alle und nicht nur die gängigen
auch z.b befehle wie
beispiel.exe c:\beispielvideo.avi
ich hab schon viel gesucht
und einiges gefunden
aber bei mir ist es so das ich bein einer textdatei per batch nur die letzten zeilen löschen will
ab zeile 5 oder 7.
nur die letzten !!
oder bestimmte
wie wird das ausgeführt ?
1. ab zeile 5 alles löschen
2. eine bestimmte zeile löschen z.b zeile 7
_____
BTW:
kennt jemand eine gute seite (kostenlos) wo alle befehle batch/cmd (windows XP)
aufgeführt werden ?
aber wirklich alle und nicht nur die gängigen
auch z.b befehle wie
beispiel.exe c:\beispielvideo.avi
und ähnliche "allgemeine" befehle
und vielleicht mit kurzer beschreibung und syntax
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 75417
Url: https://administrator.de/forum/batch-textdatei-die-letzten-letzte-zeilen-zeile-loeschen-75417.html
Ausgedruckt am: 24.12.2024 um 12:12 Uhr
11 Kommentare
Neuester Kommentar
Moin -FRITZ-,
willkommen im Forum.
Mit Batch kannst Du nicht bestimmte Zeilen in einer Textdatei aufgrund der Zeilennummer löschen.
Eigentlich.
Dieses Vorgehen können nur Editoren (oder andere Programme) machen, die als Strategie implementiert haben "Hey, ich lade ein bestehende oder auch neu zu erstellende Datei KOMPLETT. Und egal, ob da vorher keine Zeilen drin waren und nach dem Editieren 50000 oder umgekehrt - ich schreibe die Datei komplett wieder neu."
So kann es NotePad oder Word, so können es Skriptsprachen wie VBSkript, wenn sie Funktionen wie (sinngemäß) ReadAll()/WriteAll und einen Buffer reservieren können, in den 50000 Zeilen reinpassen.
Batch kann das nicht. Damit kannst Du traurigerweise nur:
Ende der harten Wahrheit. Tut mir Leid.
So, jetzt Tränchen abtrocknen, machen wir das Beste draus..
Was Batch nicht kann, ist eigentlich unwichtig, schauen wir lieber die Möglichkeiten an.
Batch kann erfreulicherweise andererseits:
Und das reicht doch vollkommen.
Somit kannst Du mit folgendem Einzeiler ziemlich flexibel alle Deine Wünsche fast erfüllen:
Dieser Oneliner (der eigentlich nur ein etwas benutzerfreundlich gestaltetes CMD-Prompt-Kommando ist), der zeigt Dir bestimmte Zeilen, alle Zeilen außer.., alle Zeilen ab.. oder alle Zeilen bis Zeilennummer einer Textdatei.
Beispiel:
ShowLines test.txt EQU 7 ------> zeigt Zeile 7 der Textdatei test.txt.
ShowLines test.txt LSS 7 ------> zeigt Zeilen Kleiner 7 der Textdatei test.txt.
ShowLines test.txt GTR 7 ------> zeigt Zeilen größer 7 der Textdatei test.txt.
ShowLines test.txt NEQ 7 ------> zeigt Zeilen außer Zeile 7 der Textdatei test.txt.
usw.
Mit diesem Mini-Batch kannst Du also, um auf Deine Wünsche zurückzukommen, alle Zeilen bis Zeile x oder alle Zeilen ab Zeile y oder alle Zeilen außer z aus einen INPUT (test.txt) auf den Bildschirm oder in einen anderen Output (z.B. Datei testneu.txt) schreiben.
Beispiel:
ShowLines test.txt LSS 7>testneu.txt
------> schreibt alle Zeilen kleiner Zeile 7 der Textdatei test.txt in eine neue Datei.
Für den Sonderfall, dass Du nicht absolute Zeilen "löschen" willst, sondern relative ("die letzten 5") musst Du erst mit "findstr /n $ test.tst" nachschauen, wieviele Zeilen denn in Deiner Datei sind.
Mehr geht nicht mit Batch. Bzw. ich habe es noch nicht herausgefunden.
Grüße
Biber
P.S. und wie man/frau mit Batch Simpson-Videos startet, das weiß ich auch nicht.
willkommen im Forum.
Mit Batch kannst Du nicht bestimmte Zeilen in einer Textdatei aufgrund der Zeilennummer löschen.
Eigentlich.
Dieses Vorgehen können nur Editoren (oder andere Programme) machen, die als Strategie implementiert haben "Hey, ich lade ein bestehende oder auch neu zu erstellende Datei KOMPLETT. Und egal, ob da vorher keine Zeilen drin waren und nach dem Editieren 50000 oder umgekehrt - ich schreibe die Datei komplett wieder neu."
So kann es NotePad oder Word, so können es Skriptsprachen wie VBSkript, wenn sie Funktionen wie (sinngemäß) ReadAll()/WriteAll und einen Buffer reservieren können, in den 50000 Zeilen reinpassen.
Batch kann das nicht. Damit kannst Du traurigerweise nur:
- jeweils ZEILENweise eine Zeile lesen AUS einer Datei (Input) und im gleichen Schritt Output erzeugen (z.B. in eine andere Datei).
Ende der harten Wahrheit. Tut mir Leid.
So, jetzt Tränchen abtrocknen, machen wir das Beste draus..
Was Batch nicht kann, ist eigentlich unwichtig, schauen wir lieber die Möglichkeiten an.
Batch kann erfreulicherweise andererseits:
- jeweils ZEILENweise eine Zeile lesen AUS einer Datei (Input) und im gleichen Schritt Output erzeugen (z.B. in eine andere Datei).
Und das reicht doch vollkommen.
Somit kannst Du mit folgendem Einzeiler ziemlich flexibel alle Deine Wünsche fast erfüllen:
::---snipp ShowLines.bat Aufruf Showlines datei [LSS|EQU|GTR|NEQ...] lineNo
@for /f "delims=: tokens=1,*" %%i in ('findstr /n $ "%~1"') do @If %%i %2 %3 @echo %%j
Dieser Oneliner (der eigentlich nur ein etwas benutzerfreundlich gestaltetes CMD-Prompt-Kommando ist), der zeigt Dir bestimmte Zeilen, alle Zeilen außer.., alle Zeilen ab.. oder alle Zeilen bis Zeilennummer einer Textdatei.
Beispiel:
ShowLines test.txt EQU 7 ------> zeigt Zeile 7 der Textdatei test.txt.
ShowLines test.txt LSS 7 ------> zeigt Zeilen Kleiner 7 der Textdatei test.txt.
ShowLines test.txt GTR 7 ------> zeigt Zeilen größer 7 der Textdatei test.txt.
ShowLines test.txt NEQ 7 ------> zeigt Zeilen außer Zeile 7 der Textdatei test.txt.
usw.
Mit diesem Mini-Batch kannst Du also, um auf Deine Wünsche zurückzukommen, alle Zeilen bis Zeile x oder alle Zeilen ab Zeile y oder alle Zeilen außer z aus einen INPUT (test.txt) auf den Bildschirm oder in einen anderen Output (z.B. Datei testneu.txt) schreiben.
Beispiel:
ShowLines test.txt LSS 7>testneu.txt
------> schreibt alle Zeilen kleiner Zeile 7 der Textdatei test.txt in eine neue Datei.
Für den Sonderfall, dass Du nicht absolute Zeilen "löschen" willst, sondern relative ("die letzten 5") musst Du erst mit "findstr /n $ test.tst" nachschauen, wieviele Zeilen denn in Deiner Datei sind.
Mehr geht nicht mit Batch. Bzw. ich habe es noch nicht herausgefunden.
Grüße
Biber
P.S. und wie man/frau mit Batch Simpson-Videos startet, das weiß ich auch nicht.
Hallo -FRITZ- und willkommen im Forum!
Wenn's denn tatsächlich Batch (und nicht etwa VBS) sein soll, etwa so:
In beiden Fällen dient "findstr /n $" dem Suchen aller Zeilen (die ein Zeilenende haben ), um diese nummeriert weitergeben zu können.
Im ersten Fall wird die Nummer als Entscheidungskriterium, ob die jeweilige Zeile noch auszugeben ist, verwendet. Falls ja (da Zeilennummer in %%i < %LineToDeleteFrom%) muss noch untersucht werden, ob es sich um eine Leerzeile handelt (um ggf mit "echo." wieder eine solche zu erzeugen).
Im zweiten Fall wird anhand der Zeilennummer der Inhalt der zu löschenden Zeile (= %%j) gesucht und mit "findstr /v" diese Zeile herausgefiltert (= alle übrigen werden ausgegeben).
Grüße
bastla
[Edit] @Biber - Na ja, mit eleganten Onelinern kann man/frau leicht schnell sein ... Außerdem musste ich noch eine Kirche um's Kreuz befördern. [/Edit]
Wenn's denn tatsächlich Batch (und nicht etwa VBS) sein soll, etwa so:
1. ab zeile 5 alles löschen
@echo off & setlocal
set "InFile=Z:\Text.txt"
set "OutFile=Z:\Erg.txt"
set /a LineToDeleteFrom=5
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%"
2. eine bestimmte zeile löschen z.b zeile 7
@echo off & setlocal
set "InFile=Z:\Text.txt"
set "OutFile=Z:\Erg.txt"
set LineToDelete=7
if exist "%OutFile%" del "%OutFile%"
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%InFile%"^|findstr /b "%LineToDelete%:"') do findstr /v /b /c:"%%j" "%InFile%">>"%OutFile%"
Im ersten Fall wird die Nummer als Entscheidungskriterium, ob die jeweilige Zeile noch auszugeben ist, verwendet. Falls ja (da Zeilennummer in %%i < %LineToDeleteFrom%) muss noch untersucht werden, ob es sich um eine Leerzeile handelt (um ggf mit "echo." wieder eine solche zu erzeugen).
Im zweiten Fall wird anhand der Zeilennummer der Inhalt der zu löschenden Zeile (= %%j) gesucht und mit "findstr /v" diese Zeile herausgefiltert (= alle übrigen werden ausgegeben).
Grüße
bastla
[Edit] @Biber - Na ja, mit eleganten Onelinern kann man/frau leicht schnell sein ... Außerdem musste ich noch eine Kirche um's Kreuz befördern. [/Edit]
@bastla
Was schreibst Du denn da alles? Heb Dir noch ein paar Zeilen auf für den Wunschzettel...
Er hat doch nur gefragt, ob wir gute Seiten lau für dau kennen, nicht ob wir mal eben welche hinschrubbeln können vor dem Abendessen..
Grüße
Biber
Was schreibst Du denn da alles? Heb Dir noch ein paar Zeilen auf für den Wunschzettel...
Er hat doch nur gefragt, ob wir gute Seiten lau für dau kennen, nicht ob wir mal eben welche hinschrubbeln können vor dem Abendessen..
Grüße
Biber
Moin -FRITZ-,
mein Einzeiler sollte auch kein fertiges produktiv einsetzbares Skript sein, sondern nur das grundsätzliche Wesen des Arbeitens mit den CMD-Befehlen aufzeigen.
Und dort ist es eben so, dass Du eben nicht so mächtige "Bausteine" wie eine Funktion "Zeige mir ein explorerähnliches Auswahlfenster zum Wählen der Zieldatei" als kombinierbare Objekte zur Verfügung hast, sondern Dir schon eine Ebene tiefer erst mal ein paar wiederverwendbare Minimodule basteln musst.
Und gerade das (nicht abgesprochene) Zusammenspiel mit bastlas gepostetem Kommentar zeigt dann die möglichen Strategien:
Die Vergleichoperatoren EQU, LSS, GTR,... sind in der Hilfe zu IF ("IF /?" am CMD-Prompt) beschrieben.
Links zu ein paar Seiten, die Batch/CMD-Feinheiten diskutieren findest Du unter "Links" im Bereich "Batch & Shell". Mehr Tipps dazu haben wir hier im Forum wahrscheinlich nicht, da wir hier eigentlich auch nur gelegentlich ein paar Gebrauchsbätche quick & dirty zusammenschroten und das Ganze eher spielerisch denn zu Lehrzwecken betreiben.
Grüße
Biber
mein Einzeiler sollte auch kein fertiges produktiv einsetzbares Skript sein, sondern nur das grundsätzliche Wesen des Arbeitens mit den CMD-Befehlen aufzeigen.
Und dort ist es eben so, dass Du eben nicht so mächtige "Bausteine" wie eine Funktion "Zeige mir ein explorerähnliches Auswahlfenster zum Wählen der Zieldatei" als kombinierbare Objekte zur Verfügung hast, sondern Dir schon eine Ebene tiefer erst mal ein paar wiederverwendbare Minimodule basteln musst.
Und gerade das (nicht abgesprochene) Zusammenspiel mit bastlas gepostetem Kommentar zeigt dann die möglichen Strategien:
- entweder kommt eine kurze Lösung raus für einen genau abgegrenzten Spezialfall
- oder es kommen eben nur ein paar etwas flexiblere wiederverwendbare Puzzlesteine raus, aus denen es sich vielleicht schneller zusammenkombinieren lässt - aber es ist nicht fertig.
Die Vergleichoperatoren EQU, LSS, GTR,... sind in der Hilfe zu IF ("IF /?" am CMD-Prompt) beschrieben.
Links zu ein paar Seiten, die Batch/CMD-Feinheiten diskutieren findest Du unter "Links" im Bereich "Batch & Shell". Mehr Tipps dazu haben wir hier im Forum wahrscheinlich nicht, da wir hier eigentlich auch nur gelegentlich ein paar Gebrauchsbätche quick & dirty zusammenschroten und das Ganze eher spielerisch denn zu Lehrzwecken betreiben.
Grüße
Biber
[quote]BTW:
kennt jemand eine gute seite (kostenlos) wo alle befehle batch/cmd (windows XP)
aufgeführt werden ?
aber wirklich alle und nicht nur die gängigen
auch z.b befehle wie
beispiel.exe c:\beispielvideo.avi
kennt jemand eine gute seite (kostenlos) wo alle befehle batch/cmd (windows XP)
aufgeführt werden ?
aber wirklich alle und nicht nur die gängigen
auch z.b befehle wie
beispiel.exe c:\beispielvideo.avi
und ähnliche "allgemeine" befehle
und vielleicht mit kurzer beschreibung und syntax[/quote]
Also ich lese im Normalfall eigentlich immer die Hilfedatei des jeweiligen Programms (Oft unter Stichwort "Aufruf", "CMD", "Commandline" oder ähnlich im Index der Hilfe zu finden). Dort sind dann auch meistens die jeweiligen CMD-Befehle, etc des Programms beschrieben (wenn sie existieren).
Ansonsten hilft meist auch "Google->[Name des Programms] commandline->Suchen" gut weiter.
Ich bezweifle, dass es eine einzige Seite gibt, die sich mit der ganzen Masse an Programmen beschäftigt und für jedes einzelne Program die CMD-Befehle dokumentiert hat, da es wie schon gesagt sehr viel einfacher ist, einfach mal die Hilfe-Datei zu lesen.
hallo Xalimeo,
schon lange her dein Beitrag, aber ich habe eine Seite gefunden!
Sogar vom Hersteller selbst: http://technet.microsoft.com/de-de/library/cc778084%28v=ws.10%29.aspx
Ich hoffe, dass ist das richtige!
Alme123
schon lange her dein Beitrag, aber ich habe eine Seite gefunden!
Sogar vom Hersteller selbst: http://technet.microsoft.com/de-de/library/cc778084%28v=ws.10%29.aspx
Ich hoffe, dass ist das richtige!
Alme123
Herr, lass Hirn regnen. Und bitte, bitte sorge dafür, dass Alme123 wenigstens diesmal was davon abbekommt!
Moin Alme123,
Ich sach mal so...
in anderen Lebensbereichen -z.B. in Scheidungsprozessen - könnte ein solcher Dialog
Zum anderen ist diese Webseite in einer stilisierten, aber erkennbaren Version auch Offline verfügbar auf vielen Windows-Rechnern.
Aber ist auch egal - ihr braucht das Thema bitte hier nicht vertiefen.
Fragt mich einfach per PN, wenn irgendetwas unklar sein sollte.
Grüße
Biber
Ich sach mal so...
in anderen Lebensbereichen -z.B. in Scheidungsprozessen - könnte ein solcher Dialog
"Kannst du mir mal das Salz reichen, Schatz?"
"Gerne, Liebling"
fatale Konsequenzen haben, wenn er sich uber fünf Jahre hinzieht."Gerne, Liebling"
Zum anderen ist diese Webseite in einer stilisierten, aber erkennbaren Version auch Offline verfügbar auf vielen Windows-Rechnern.
Aber ist auch egal - ihr braucht das Thema bitte hier nicht vertiefen.
Fragt mich einfach per PN, wenn irgendetwas unklar sein sollte.
Grüße
Biber