Suche wort in .txt und lösche alles darüber!
Hallo,
Wollte mal fragen ob sowas mittels Batch realisierbar wäre. "Suche ein Wort in einer .txt und lösche alles was darüber steht."
Bsp:
Output.txt
Output.txt nach der bearbeitung der Batch
hoffe das wäre möglich :P
MFG
Wollte mal fragen ob sowas mittels Batch realisierbar wäre. "Suche ein Wort in einer .txt und lösche alles was darüber steht."
Bsp:
Output.txt
Auto
schnelles Mottorad
Kaputtes Fahrrad
Auto
LKW
Output.txt nach der bearbeitung der Batch
Auto
LKW
hoffe das wäre möglich :P
MFG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 213609
Url: https://administrator.de/contentid/213609
Ausgedruckt am: 27.11.2024 um 00:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo pnk001!
Kombiniert sähe das dann etwa so aus:
Was noch zu klären bliebe ist, ob nach kompletten Zeilen oder nach dem Vorkommen des Suchstrings am Zeilenanfang oder irgendwo in der Zeile gesucht wird - entsprechend dann die "
Grüße
bastla
wie bekomme ich das nun hin das er mir die sachen aus der test.txt löscht?
Aus der "test.txt" löschen kannst Du nicht, aber die "test.txt" nur mit den gewünschten Werten neu zu erstellen ist natürlich möglich.wäre es möglich die letzte 1. auch mit zu löschen?
Natürlich - das war ja Endoros Ansatz (ohne -1
) - ich hatte mich ja nur auf Deine konkrete Formulierung bezogen, undalles was darüber steht.
inkludiert eben nicht die gesuchte Zeile selbst.Kombiniert sähe das dann etwa so aus:
@echo off & setlocal
set "Datei=test.txt"
set "Suche=1"
set "Bak=%temp%\Tmp.tmp"
move "%Datei%" "%Bak%"
for /f "delims=:" %%a in ('findstr /nc:"%Suche%" "%Bak%"') do set /a line=%%a
<"%Bak%" >"%Datei%" more +%line%
findstr
"-Schalter "/nxc:
" oder "/nbc:
" oder "/nc:
" verwenden.Grüße
bastla
Hallo,
ich bin neu hier und bin kompletter neuling was .bat dateien angeht (muss mich damit im rahmen meiner ba beschäftigen) und würde mich gerne mal mit an den thread dranhängen, da es um was ähniches geht.
Ich würde gerne ab einem bestimmten string alles in der .txt löschen, hab aber nicht wircklich ne idee wie ich das was ihr hier schon gepostet hab umbauen soll
ich bin neu hier und bin kompletter neuling was .bat dateien angeht (muss mich damit im rahmen meiner ba beschäftigen) und würde mich gerne mal mit an den thread dranhängen, da es um was ähniches geht.
Ich würde gerne ab einem bestimmten string alles in der .txt löschen, hab aber nicht wircklich ne idee wie ich das was ihr hier schon gepostet hab umbauen soll
Hallo Balegor, willkommen im Forum.
Eigentlich solltest du schon deinen eigenen Thread aufmachen, aber naja ...
Es gibt unterschiedliche Ansätze. Hier mal, wie ich es erledigt hätte:
test.txt
*.bat
Dateien werden in Batch zeilenweise abgearbeitet. Ggf. musst du dein
Grüße
rubberman
Eigentlich solltest du schon deinen eigenen Thread aufmachen, aber naja ...
Es gibt unterschiedliche Ansätze. Hier mal, wie ich es erledigt hätte:
test.txt
Lorem ipsum dolor sit amet,
consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua.
Ich bin die letzte Zeile.
Ich werde gelöscht.
At vero eos et accusam et justo duo dolores et ea rebum.
Stet clita kasd gubergren,
no sea takimata sanctus est Lorem ipsum dolor sit amet.
*.bat
@echo off &setlocal
set "file=test.txt"
set "search=Ich bin die letzte Zeile."
set "lastline="
for /f "delims=:" %%i in ('findstr /nc:"%search%" "%file%"') do if not defined lastline set "lastline=%%i"
if not defined lastline goto :eof
setlocal EnableDelayedExpansion
<"!file!" >"!temp!\text.tmp" (
for /l %%i in (1 1 %lastline%) do (
set "ln=" &set /p "ln="
echo(!ln!
)
)
endlocal
move "%temp%\text.tmp" "%file%"
ab einem bestimmten string
noch weiter konkretisieren.Grüße
rubberman
hmm bei deinem Bsp. funktioniert die .bat ohne Probleme, bei meiner .txt schreibt sie nur viele leere Zeilen ans Ende und macht ab und zu mitten im Wort nen Zeilenumbruch.
Meine Ausgangsdatei enthält sql befehle für db2 und ich möchte die Datei so umschreiben das sie ich sie mit postgresql nutzen kann, da postgresql aber ne ganze Reihe an Befehlen nicht kennt, wollt ich den Teil der Datei einfach "abschneiden". Der String an dem "abgeschnitten" werden soll ist einfach nur: "-- bis hier her", aber vorher kommen halt auch ne menge "@" Zeichen (weis nicht ob das nen Unterschied macht)
EDIT: der besagte string sollte dann auch mit abgeschnitten werden
Meine Ausgangsdatei enthält sql befehle für db2 und ich möchte die Datei so umschreiben das sie ich sie mit postgresql nutzen kann, da postgresql aber ne ganze Reihe an Befehlen nicht kennt, wollt ich den Teil der Datei einfach "abschneiden". Der String an dem "abgeschnitten" werden soll ist einfach nur: "-- bis hier her", aber vorher kommen halt auch ne menge "@" Zeichen (weis nicht ob das nen Unterschied macht)
EDIT: der besagte string sollte dann auch mit abgeschnitten werden
Hallo Balegor.
Batch verarbeitet Textdateien im ASCII Zeichensatz. Bei meinem Beispiel kommt noch hinzu dass nur Windows-Zeilenumbrüche (0x0D 0x0A) akzeptiert werden und Zeilen nur bis zum 1023. Zeichen eingelesen werden.
Wo das Problem steckt weiß ich nicht, ohne deine Datei zu kennen. In einem HEX Editor solltest du das oben genannte aber herausfinden können.
Grüße
rubberman
Batch verarbeitet Textdateien im ASCII Zeichensatz. Bei meinem Beispiel kommt noch hinzu dass nur Windows-Zeilenumbrüche (0x0D 0x0A) akzeptiert werden und Zeilen nur bis zum 1023. Zeichen eingelesen werden.
Wo das Problem steckt weiß ich nicht, ohne deine Datei zu kennen. In einem HEX Editor solltest du das oben genannte aber herausfinden können.
Grüße
rubberman
also die Zeilenumbrüche sind alle 0A (ein Punkt im HEX Editor) und die Zeilen sind nie länger als 80 Zeichen
die Datei besteht halt zum größen Teil aus create table anweisungen wie hier und irgentwann kommt halt der string:
CREATE TABLE customer (
c_custkey INTEGER NOT NULL,
c_name VARCHAR(25),
c_address VARCHAR(40),
c_nationkey INTEGER NOT NULL,
c_phone CHAR(15),
c_acctbal DECIMAL(12, 2),
c_mktsegment CHAR(10),
c_comment VARCHAR(117),
CONSTRAINT customer_pk PRIMARY KEY(C_CUSTKEY),
CONSTRAINT nation_fk FOREIGN KEY(c_nationkey)
REFERENCES nation(n_nationkey) ON DELETE RESTRICT
)@
CREATE INDEX cust_name_idx ON customer(c_name)@
.
.
.
-- bis hier her
ab da soll alles inclusive des strings abgeschnitten werden
die Datei besteht halt zum größen Teil aus create table anweisungen wie hier und irgentwann kommt halt der string:
CREATE TABLE customer (
c_custkey INTEGER NOT NULL,
c_name VARCHAR(25),
c_address VARCHAR(40),
c_nationkey INTEGER NOT NULL,
c_phone CHAR(15),
c_acctbal DECIMAL(12, 2),
c_mktsegment CHAR(10),
c_comment VARCHAR(117),
CONSTRAINT customer_pk PRIMARY KEY(C_CUSTKEY),
CONSTRAINT nation_fk FOREIGN KEY(c_nationkey)
REFERENCES nation(n_nationkey) ON DELETE RESTRICT
)@
CREATE INDEX cust_name_idx ON customer(c_name)@
.
.
.
-- bis hier her
ab da soll alles inclusive des strings abgeschnitten werden
Hallo Balegor.
Man könnte MORE vorher die Zeilenumbrüche "normalisieren" lassen. Eine Zeile mehr wegzuschneiden ist auch nicht das Problem ...
Teste:
Grüße
rubberman
Edit: Aufräumen vergessen
Man könnte MORE vorher die Zeilenumbrüche "normalisieren" lassen. Eine Zeile mehr wegzuschneiden ist auch nicht das Problem ...
Teste:
@echo off &setlocal
set "file=test.txt"
set "search=-- bis hier her"
<"%file%" >"%temp%\text.tmp" more
set "lastline="
for /f "delims=:" %%i in ('findstr /nc:"%search%" "%temp%\text.tmp"') do if not defined lastline set /a "lastline=%%i-1"
if not defined lastline goto :eof
setlocal EnableDelayedExpansion
<"!temp!\text.tmp" >"!file!" (
for /l %%i in (1 1 %lastline%) do (
set "ln=" &set /p "ln="
echo(!ln!
)
)
del "!temp!\text.tmp"
Grüße
rubberman
Edit: Aufräumen vergessen
hat sich erledigt, hatte nen tippfehler -.- für meine anderen fragen mach ich mal nen eigenen thread auf
thx erstmal für die hilfe rubberman