Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Per echo Command eine bestimmte zeile überschreiben ?

Frage Entwicklung Batch & Shell

Mitglied: Cynix01

Cynix01 (Level 1) - Jetzt verbinden

29.04.2009, aktualisiert 18.10.2012, 12462 Aufrufe, 12 Kommentare

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.

Mit freundlichen Grüßen Cynix01
Mitglied: Biber
29.04.2009 um 08:24 Uhr
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):
  • 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
Bitte warten ..
Mitglied: LotPings
29.04.2009 um 11:10 Uhr
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
  • innerhalb Im 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
Bitte warten ..
Mitglied: Cynix01
29.04.2009 um 11:31 Uhr
Hi Biber,

Danke für deine info ich werd mal in Dem thread per Suche schauen nur ich wusste ned wie ich suchen soll, also eben ich wäre nie auf den Suchbegriff "Suchen ersetzen Batch" gekommen. weil ich wusste ja ned mal wie dass Theoritisch zu realisieren wäre.
Jetzt anhand deinen Punkten weiss ich es(die grobe umsetzung).

Mit freundlichen Grüßen Cynix01
Bitte warten ..
Mitglied: Cynix01
29.04.2009, aktualisiert 18.10.2012
Hi Biber,

Habe nun auch mal nach anderen beiträgen gesucht, bin auf folgenden gestoßen:

http://www.administrator.de/forum/per-batch-zeile-mit-bestimmtem-wort-l ... 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 ?


Mit freundlichen Grüßen Cynix01
Bitte warten ..
Mitglied: LotPings
29.04.2009, aktualisiert 18.10.2012
Zitat von Cynix01:
Habe nun auch mal nach anderen beiträgen gesucht, bin auf folgenden gestoßen:

http://www.administrator.de/forum/per-batch-zeile-mit-bestimmtem-wort-l ... 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.

01.
@echo off 
02.
set In=Input.txt 
03.
set Out=output.txt 
04.
set Line=3 
05.
set NewText=Neuer Text 
06.
 
07.
Type Nul >%Out% 
08.
for /f "tokens=1* delims=[]" %%A in ( 
09.
  'find /V /N "" ^<%In%' 
10.
) do if %%A==%Line% ( 
11.
>>%Out% echo/%NewText% 
12.
) else ( 
13.
>>%Out% echo/%%B 
14.
)
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]
Bitte warten ..
Mitglied: Cynix01
29.04.2009 um 13:04 Uhr
Hey Danke LotPings,

ich muss mich mal wohl mehr mit Batch anweisungen befreunden aber is im Prinzip ja wohl ned schwerer als irgendwelche if/else for/do while anweisungen in C/Java zu machen, nur die syntax is etwas anders, 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.

Mit freundlichen Grüßen Cynix01
Bitte warten ..
Mitglied: Cynix01
29.04.2009 um 14:26 Uhr
Hab noch 1 Hürde die ich nicht meister, ich will die Batch noch per echo commands erstellen
jedoch klappt dass z.B. mit folgenden zeichen nicht so wie ich will ich shcreib mal dein script hin und mach mal comments wie z.B. in C

echo set In=Input.txt>c:\script.bat
echo set Out=output.txt>>c:\script.bat
echo set Line=3>>c:\script.bat
set NewText=Neuer Text>>script.bat
echo Type Nul >%Out%>>c:\script.bat hier schon das erste syntax problem wegen >
echo for /f "tokens=1* delims=[]" %%A in (>>c:\script.bat
hier soweit alles klar
echo 'find /V /N "" ^<%In%'>>c:\script.bat hier ^ dieses zeichen wird auch ein syntax fehler
echo ) do if %%A==%Line% (>>c:\script.bat
echo >>%Out% echo/%NewText% >>c:\script.bat
Syntax prob wieder wegen > bzw. >>
echo ) else (>>c:\script.bat
echo >>%Out% echo/%%B >>c:\script.bat wieder syntax wegen >>
echo ) >>c:\script.bat
start c:\script.bat
wegen all den syntax fehlern um das script file per echo zu erstellen geht hier beim starten des scriptes auch alles schief

also ich will eig. wirklich mal alles versuchen per cmd hinzukriegen ohne nen texteditor wo man das script copy paste hinschmettern kann.
Ich hoffe mal da gibt es ne Lösung das syntax technisch umzusetzen (eben nur per cmd lines ohne editor)

Mit freundlichen Grüßen Cynix01
Bitte warten ..
Mitglied: LotPings
29.04.2009 um 15:35 Uhr
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 /?

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.

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.
Bitte warten ..
Mitglied: LotPings
29.04.2009 um 15:46 Uhr
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
Bitte warten ..
Mitglied: torch88
28.07.2009, aktualisiert 18.10.2012
habe zu diesem code noch ne frage:

Zitat von LotPings:
> Zitat von Cynix01:
> Habe nun auch mal nach anderen beiträgen gesucht, bin auf
folgenden gestoßen:
>
> http://www.administrator.de/forum/per-batch-zeile-mit-bestimmtem-wort-l ... 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.

01.
> @echo off 
02.
> set In=Input.txt 
03.
> set Out=output.txt 
04.
> set Line=3 
05.
> set NewText=Neuer Text 
06.
>  
07.
> Type Nul >%Out% 
08.
> for /f "tokens=1* delims=[]" %%A in ( 
09.
>   'find /V /N "" ^<%In%' 
10.
> ) do if %%A==%Line% ( 
11.
> >>%Out% echo/%NewText% 
12.
> ) else ( 
13.
> >>%Out% echo/%%B 
14.
> ) 
15.
> 
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
Bitte warten ..
Mitglied: bastla
28.07.2009 um 20:52 Uhr
Hallo torch88!

Völlig ungetestet:
01.
@echo off & setlocal 
02.
set In=Input.txt 
03.
set Out=output.txt 
04.
set Line=3 
05.
set NewText=Neuer Text 
06.
  
07.
Type Nul >%Out% 
08.
for /f "tokens=1* delims=:" %%A in ('findstr /N "^" "%In%"') do if %%A==%Line% (>>%Out% echo/%NewText%) else (>>%Out% echo/%%B)
Grüße
bastla
Bitte warten ..
Mitglied: torch88
28.07.2009 um 22:51 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst Vbscript bestimmte Zeile ungeachtet der Nummerierung löschen (4)

Frage von aletri zum Thema VB for Applications ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...