Per echo Command eine bestimmte zeile überschreiben ?
Hallo ich komme leider nicht weiter auch nicht durch googlen deshalb wend ich mich an dieses Forum hier, würde mich freuen wenn mir jemand helfen kann.
Hallo erst mal an alle. Ich suche nach eine Lösung wie ich in einer Datei die bereits vorhanden ist mit mehreren text zeilen, nur eine bestimmte zeile zu löschen und aktualiesieren also anfangs sieht sie z.B. die datei "test.txt" wie gefolgt aus:
text-zeile 1
text-zeile 2
text-zeile 3
text-zeile n
.
.
.usw....
so nun will ich n'te zeile oder z.B. als absoluter wert zeile 3 ("Beispielsweise") mit einem anderen text überschreiben(aber eben nur diese zeile die anderen sollen davon nicht betroffen sein) irgendwie per echo text>>c:\test.txt, so erstellt man aber eben nur eine neue zeile, wie kann man dass anpassen, brauch man dafür ein ganzes script ? Und wenn ja wie realisier ich dass ?
Würde mich über antworten freuen.
mfg Cynix01
Hallo erst mal an alle. Ich suche nach eine Lösung wie ich in einer Datei die bereits vorhanden ist mit mehreren text zeilen, nur eine bestimmte zeile zu löschen und aktualiesieren also anfangs sieht sie z.B. die datei "test.txt" wie gefolgt aus:
text-zeile 1
text-zeile 2
text-zeile 3
text-zeile n
.
.
.usw....
so nun will ich n'te zeile oder z.B. als absoluter wert zeile 3 ("Beispielsweise") mit einem anderen text überschreiben(aber eben nur diese zeile die anderen sollen davon nicht betroffen sein) irgendwie per echo text>>c:\test.txt, so erstellt man aber eben nur eine neue zeile, wie kann man dass anpassen, brauch man dafür ein ganzes script ? Und wenn ja wie realisier ich dass ?
Würde mich über antworten freuen.
mfg Cynix01
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 114915
Url: https://administrator.de/contentid/114915
Ausgedruckt am: 25.11.2024 um 05:11 Uhr
12 Kommentare
Neuester Kommentar
Moin Cynix01,
willkommen im Forum.
Mit den Möglichkeiten der CMD.exe kannst Du -zumindest physisch- nicht in einer Textdatei editieren.
Du kannst letzten Endes entweder eine Datei lesen, eine Datei neu schreiben oder an das Ende einer vorhandenen Datei etwas anfügen.
Alle "logischen" Operationen wie Löschen, Ersetzen, Einfügen müssen entsprechend diesen Restriktionen erfolgen.
In Deinem Fall wäre also eine mögliche Strategie (wenn es denn partout mit dem Werkzeug CMD.exe erfolgen muss):
Beispiele dazu findest Du über die Forumssuche mit "Suchen ersetzen Batch".
Grüße
Biber
willkommen im Forum.
Mit den Möglichkeiten der CMD.exe kannst Du -zumindest physisch- nicht in einer Textdatei editieren.
Du kannst letzten Endes entweder eine Datei lesen, eine Datei neu schreiben oder an das Ende einer vorhandenen Datei etwas anfügen.
Alle "logischen" Operationen wie Löschen, Ersetzen, Einfügen müssen entsprechend diesen Restriktionen erfolgen.
In Deinem Fall wäre also eine mögliche Strategie (wenn es denn partout mit dem Werkzeug CMD.exe erfolgen muss):
- Lese die ursprüngliche Textdatei Alt.txt komplett Zeile für Zeile mit einer FOR/F-Anweisung
- Vergleiche jede Zeile mit dem Suchkriterium
- Wenn ungleich Suchwert -> schreibe die gelesene Zeile aus Alt.txt in eine neue Datei Neu.txt
- Wenn gleich Suchwert -> schreibe eine neue Zeile nach Deinen Vorstellungen in Datei Neu.txt
- Wenn fertig mit dem Zeilen-Lesen: Ersetze (überschreibe) Datei Alt.txt mit Neu.txt
Beispiele dazu findest Du über die Forumssuche mit "Suchen ersetzen Batch".
Grüße
Biber
Moin Biber,
hört sich wirklich nach einer Übungsaufgabe an
vielleicht noch zu ergänzen das man bei einer bestimmten Zeilennummer eben die Zeilen zählen muss, entweder
Gruß
LotPings
hört sich wirklich nach einer Übungsaufgabe an
vielleicht noch zu ergänzen das man bei einer bestimmten Zeilennummer eben die Zeilen zählen muss, entweder
innerhalbIm Do-Teil der for /f Schleife (Hat den Nachteil das leere Zeilen von For /f ignoriert werden und man Subroutine/DelayedExpansion braucht) oder- indem man For /f eine numerierte Datei übergibt mit
find /v/ /n "" <Datei.txt
Gruß
LotPings
Zitat von @Cynix01:
Habe nun auch mal nach anderen beiträgen gesucht, bin auf folgenden gestoßen:
Per Batch Zeile mit bestimmtem Wort löschen und nach einer bestimmten Zeile etwas einfügen. damit wäre es theoritisch realisierbar, wenn ich " n1=" (siehe beitrag) z.B. in zeile 2 ändere um in zeile 3 die ich in dem script dann auch anpasse um sie vorher temporär zu löschen um die 3. zeile dann zu ersetzen? Oder lieg ich da falsch ?
Ja Habe nun auch mal nach anderen beiträgen gesucht, bin auf folgenden gestoßen:
Per Batch Zeile mit bestimmtem Wort löschen und nach einer bestimmten Zeile etwas einfügen. damit wäre es theoritisch realisierbar, wenn ich " n1=" (siehe beitrag) z.B. in zeile 2 ändere um in zeile 3 die ich in dem script dann auch anpasse um sie vorher temporär zu löschen um die 3. zeile dann zu ersetzen? Oder lieg ich da falsch ?
Das 2-teilige Beispiel ist so nicht anwendbar.
@echo off
set In=Input.txt
set Out=output.txt
set Line=3
set NewText=Neuer Text
Type Nul >%Out%
for /f "tokens=1* delims=" %%A in (
'find /V /N "" ^<%In%'
) do if %%A==%Line% (
>>%Out% echo/%NewText%
) else (
>>%Out% echo/%%B
)
Zum Veranschaulichen was im Batch passiert, schau dir mal in einem Cmd Fenster die Ausgabe an von:
find /V /B "" <BeliebigeDatei.txt
Gruß
LotPings
[EDIT]Zeile 11 und 13 geändert! [/Edit]
Zitat von @Cynix01:
was
bedeutet denn z.B. "%%" vor eine variablen ? %Variable% dass is mir klar nur %%Variable ?
Schleifenvariablen sind direkt auf der Kommandozeile mit einfachem %a, und in einer Batchdatei mit doppeltem %%a zu benutzen. siehe: For /?was
bedeutet denn z.B. "%%" vor eine variablen ? %Variable% dass is mir klar nur %%Variable ?
Ich glaub ich leg mir maln gutes buch zu batch scripting an, könntet ihr mir ein gutes empfehlen ?
Ich weiss man kann sich dass auch alles im Netz zusammenkratzen, mir ist aber ein buch in der Hand lieber, aber es sollte dann auch alles gut und ausführlich von jedem etwas behandelt werden.
Ich weiss man kann sich dass auch alles im Netz zusammenkratzen, mir ist aber ein buch in der Hand lieber, aber es sollte dann auch alles gut und ausführlich von jedem etwas behandelt werden.
Leider gibts da nicht viele. Da ich von der ersten DOS Version (eigentlich CP/M) dabei bin, hab ich nie eins gefunden das zu meinem jeweiligen Wissensstand gepasst hätte.
Der einfachste Weg, auf der Kommandozeile einen Textaus der Zwischenablage in eine Datei zu packen ist über
(Es sollten aber der QuickEdit- und Einfügemodus in den Fenstereigenschaften aktiviert sein.):
Copy con DeinBatch.cmd[Enter]
[rechte Maustaste]
[STRG-Z oder F6][Enter]
Wenn du mit echo Befehlen arbeiten willst, musst du verhindern das IO-Umleitungen Pipes etc direkt interpretiert werden, Anstatt als Befehl in die Ausgabedatei geschrieben zu werden.
Dieses Escapen kannst du mit einem Caret ^ direkt vor dem Zeichen machen (funktioniert übrigens auch mit einem Zeilenumbruch)
Gruß
LotPings
(Es sollten aber der QuickEdit- und Einfügemodus in den Fenstereigenschaften aktiviert sein.):
Copy con DeinBatch.cmd[Enter]
[rechte Maustaste]
[STRG-Z oder F6][Enter]
Wenn du mit echo Befehlen arbeiten willst, musst du verhindern das IO-Umleitungen Pipes etc direkt interpretiert werden, Anstatt als Befehl in die Ausgabedatei geschrieben zu werden.
Dieses Escapen kannst du mit einem Caret ^ direkt vor dem Zeichen machen (funktioniert übrigens auch mit einem Zeilenumbruch)
Gruß
LotPings
habe zu diesem code noch ne frage:
und zwar: funktioniert (fast) perfekt, ABER:
habe in der zu bearbeitenden datei [ ] als zeichen und diese werden in der zu bearbeitenden datei zwingend benötigt.
jetzt löscht mir aber das skript die gesamten [ und die ] bleiben stehen.
wofür wird also delims=" genau verwendet? setzt die beiden klammern als delims, also trennzeichen ein, oder? aber ich habe es mit zeichen versucht, die nicht in der datei vorkommen, mit dem ergebnis, dass die ausgabedatei leer ist... jemand einen lösungsvorschlag?
gruß torch
Zitat von @77559:
> Zitat von @Cynix01:
> Habe nun auch mal nach anderen beiträgen gesucht, bin auf
folgenden gestoßen:
>
> Per Batch Zeile mit bestimmtem Wort löschen und nach einer bestimmten Zeile etwas einfügen. damit
wäre es theoritisch realisierbar, wenn ich " n1="
(siehe beitrag) z.B. in zeile 2 ändere um in zeile 3 die ich in
dem script dann auch anpasse um sie vorher temporär zu
löschen um die 3. zeile dann zu ersetzen? Oder lieg ich da
falsch ?
Ja
Das 2-teilige Beispiel ist so nicht anwendbar.
Zum Veranschaulichen was im Batch passiert, schau dir mal in einem
Cmd Fenster die Ausgabe an von:
Gruß
LotPings
[EDIT]Zeile 11 und 13 geändert! [/Edit]
> Zitat von @Cynix01:
> Habe nun auch mal nach anderen beiträgen gesucht, bin auf
folgenden gestoßen:
>
> Per Batch Zeile mit bestimmtem Wort löschen und nach einer bestimmten Zeile etwas einfügen. damit
wäre es theoritisch realisierbar, wenn ich " n1="
(siehe beitrag) z.B. in zeile 2 ändere um in zeile 3 die ich in
dem script dann auch anpasse um sie vorher temporär zu
löschen um die 3. zeile dann zu ersetzen? Oder lieg ich da
falsch ?
Ja
Das 2-teilige Beispiel ist so nicht anwendbar.
> @echo off
> set In=Input.txt
> set Out=output.txt
> set Line=3
> set NewText=Neuer Text
>
> Type Nul >%Out%
> for /f "tokens=1* delims=" %%A in (
> 'find /V /N "" ^<%In%'
> ) do if %%A==%Line% (
> >>%Out% echo/%NewText%
> ) else (
> >>%Out% echo/%%B
> )
>
Zum Veranschaulichen was im Batch passiert, schau dir mal in einem
Cmd Fenster die Ausgabe an von:
find /V /B "" <BeliebigeDatei.txt
Gruß
LotPings
[EDIT]Zeile 11 und 13 geändert! [/Edit]
und zwar: funktioniert (fast) perfekt, ABER:
habe in der zu bearbeitenden datei [ ] als zeichen und diese werden in der zu bearbeitenden datei zwingend benötigt.
jetzt löscht mir aber das skript die gesamten [ und die ] bleiben stehen.
wofür wird also delims=" genau verwendet? setzt die beiden klammern als delims, also trennzeichen ein, oder? aber ich habe es mit zeichen versucht, die nicht in der datei vorkommen, mit dem ergebnis, dass die ausgabedatei leer ist... jemand einen lösungsvorschlag?
gruß torch
Hi bastla!
Probier ich gleich aus
Gruß torch
EDIT:
Muss mich nochmals bei dir bedanken, funktioniert!
Nur aus reinem Interesse, ich versteh nämlich nicht genau, was bei dem alten Script das delims= bewirkt, ganz normal die beiden Zeichen als Trennzeichen definieren oder ist das ein spezieller Befehl?
Ebenso blick ich die ' in beiden Quelltexten nicht ganz.
Schöne Grüße, torch
Probier ich gleich aus
Gruß torch
EDIT:
Muss mich nochmals bei dir bedanken, funktioniert!
Nur aus reinem Interesse, ich versteh nämlich nicht genau, was bei dem alten Script das delims= bewirkt, ganz normal die beiden Zeichen als Trennzeichen definieren oder ist das ein spezieller Befehl?
Ebenso blick ich die ' in beiden Quelltexten nicht ganz.
Schöne Grüße, torch