Verwandte Beiträge
- Batch - Bestimmte Zeilen aus txt auslesen und in neue txt schreiben (16)
- Batch: Alle Zeilen aus txt abarbeiten (3)
- Bedingt Zeilen aus .txt kopieren per Batch (8)
- EINE Zeile aus TXT-Datei auslesen (5)
- Bestimmte Zeilen aus Batch auslesen? (1)
- bestimmten Text per Batch aus txt auslesen (4)
- Zeilen aus Textdatei auslesen und modifiziert in eine neue Textdatei schreiben (7)
- bestimmte Zeile aus .txt oder .log kopieren per batch vbs (17)
- Batch - Bestimmte Zeile aus .txt in Variable einlesen (8)
- Zwei Zeilen aus txt-Datei auslesen und als Variablen in VBS-Script verwenden (25)
- Jede 6 Zeile aus txt File auslesen (3)
- 2 x zeile für zeile vars aus txt auslesen und weiterverwenden (19)
- Zeile aus Datei auslesen und diese dann umbenennen (7)
- Vorletzte Zeile aus Textdatei auslesen; Zeilenanzahl ist nicht konstant; Inhalt ist unbekannt (29)
- Wie Text Zeilenweise per Batch aus txt auslesen...? (2)
- Letzten 50 Zeilen einer TXT auslesen und neue TXT uploaden (4)
- verschiedene Zeilen aus .txt entfernen (8)
- Wie bestimmte Stellen in Zeilen aus .txt entfernen (3)
- Textdateien gleichen Aufbaus (immer 1 Zeile) aus einem Verzeichnis inklusive des Dateinamens der Quelldateien in eine Lange Textdatei zusammenführen (7)
- mehr >>
Frage im Bereich
Batchdatei soll immer nur die neuste zeile aus einer .txt auslesen und anzeigen
Geschrieben von Feardotcom am 2008/10/14 um 12:13:48 Uhr, 11 Antworten, 1302 Aufrufe, Status: gelöst
Hallo,
vorab wollte ich nur kurz erwähnen, dass ich relativ unerfahren bin und mich bei allen helfenden oder verbessernden Beitragsverfassern bedanken möchte =)
Nun zu meinem Problem:
Ich versuche ein Chat zu entwickeln,welcher aus 3 Teilen besteht:
-1 und 2, sind die beiden Eingabefenster :
@echo off
set /p username=Username:
echo Type "username" to choose a new username.
echo.
:A
set /p Eingabe=Eingabe (%username%) :
if "%Eingabe%"=="username" Goto B
echo %username%: %Eingabe% >> hi.txt
goto A
-die aus 1 & 2 verfassten und in die textdatei umgeleiteten Kommentare sollen im Fenster 3 aufgelistet werden, und dort liegt mein Problem. Der Text sieht so aus:
@echo off
cls
echo. > hi.txt
:A
cls
more hi.txt
ping localhost -n 2 > nul
goto A
.... allerdings geht er die schleife immer wieder ab und ruft den Text aus der .txt immer wieder auf, was zum Flackern fürht.
Ich würde gerne wissen, wie man Fenster 3 programmiert, dass es nur die neuste zeile der .txt ausliest und dem Fenster 3 unten anfügt.
Herzlichen Dank
Fear
Ich versuche ein Chat zu entwickeln,welcher aus 3 Teilen besteht:
-1 und 2, sind die beiden Eingabefenster :
@echo off
set /p username=Username:
echo Type "username" to choose a new username.
echo.
:A
set /p Eingabe=Eingabe (%username%) :
if "%Eingabe%"=="username" Goto B
echo %username%: %Eingabe% >> hi.txt
goto A
-die aus 1 & 2 verfassten und in die textdatei umgeleiteten Kommentare sollen im Fenster 3 aufgelistet werden, und dort liegt mein Problem. Der Text sieht so aus:
@echo off
cls
echo. > hi.txt
:A
cls
more hi.txt
ping localhost -n 2 > nul
goto A
.... allerdings geht er die schleife immer wieder ab und ruft den Text aus der .txt immer wieder auf, was zum Flackern fürht.
Ich würde gerne wissen, wie man Fenster 3 programmiert, dass es nur die neuste zeile der .txt ausliest und dem Fenster 3 unten anfügt.
Herzlichen Dank
Fear
Veröffentlichen Sie diesen Beitrag in Ihrem sozialen Netzwerk
11 Antworten
1
Top ^
miniversum schreibt am 2008/10/14 um 13:11:57 Uhr
Die Letzte Zeile bekommst Du hinindem du it einer For-Schleife jede Zeile einliest udn in der gleichen Variabeln immer wieder speicherst. Dannach stehtin dieser Variabeln die letzte Zeile:
Du solltest allerdinge vorher immer noch abfragen ob die Datei sich überhaubt verändert hat, sonst würde ja imemr wieder die letzte zeile ausgegeben werden, auch wen keiner was schreibt. Also wäre es noch sinvoll z.B. das letzte-Änderungs-Datum der Datei zu merken und zu kontrollieren oder mit dem Archivbit oder einer Flagdatei zu arbeiten.
01.
02.
2
Feardotcom schreibt am 2008/10/14 um 14:28:44 Uhr
Wie sähe das dann ca. mit deinem zusätzlichen Tip aus?Kannst du ein beispiel geben?
Ich bin jetzt soweit :
wenn das allerdings so aussieht, ruft der das einmal auf und beendet das doch gleich wieder?
Ich bin jetzt soweit :
01.
@echo off 02.
cls 03.
FOR /F "delims=" %%i in (hi.txt) do set zeile=%%i 04.
echo %zeile%3
miniversum schreibt am 2008/10/14 um 20:05:34 Uhr
Ja das war auch nur das eigentliche Auslesen der letzten Zeile ansich.
Ich erklärs mal anhand einer Flag-Datei weil das recht einfach ist (die anderen Möglichkeiten sind aber auch nicht sooo dramatisch zu realisieren):
Zunächst müßtest du die Batches 1 & 2 die die Eingabe in die hi.txt machen erweitern.
Nach der Zeile:
kommt noch diese Zeile dazu:
So wird nach jeder Eingabe die Datei Flag erzeugt.
Die Batch für das dritte Fenster würde dan immer in Schleide laufen und überprüfen ob die Flagdatei existiert. Wenn ja wird sie gelöscht und die letzte Zeile der hi.txt ausgegeben.
Da wäre dann so:
Ich erklärs mal anhand einer Flag-Datei weil das recht einfach ist (die anderen Möglichkeiten sind aber auch nicht sooo dramatisch zu realisieren):
Zunächst müßtest du die Batches 1 & 2 die die Eingabe in die hi.txt machen erweitern.
Nach der Zeile:
01.
echo %username%: %Eingabe% >> hi.txt01.
echo flag>flagDie Batch für das dritte Fenster würde dan immer in Schleide laufen und überprüfen ob die Flagdatei existiert. Wenn ja wird sie gelöscht und die letzte Zeile der hi.txt ausgegeben.
Da wäre dann so:
01.
@echo off 02.
cls 03.
:loop 04.
if exist flag ( 05.
FOR /F "delims=" %%i in (hi.txt) do set zeile=%%i 06.
echo %zeile% 07.
) 08.
goto:loop4
Feardotcom schreibt am 2008/10/15 um 15:52:03 Uhr
huhu
Danke für den Vorschlag =) , aber wenn man die erste Eingabe und somit diese flag datei das erste mal erstellt, ist sie doch durchgehend da und er macht sozusagen ne schleife, so dass er dauerhaft die erste Eingabe anzeigt ....
Danke für den Vorschlag =) , aber wenn man die erste Eingabe und somit diese flag datei das erste mal erstellt, ist sie doch durchgehend da und er macht sozusagen ne schleife, so dass er dauerhaft die erste Eingabe anzeigt ....
6
miniversum schreibt am 2008/10/15 um 18:58:03 Uhr
Ups ja das war auch so gedacht. hatte ich vergessen zu coden. in der erklärung des Ablaufs ists ja erwähnt.
7
Feardotcom schreibt am 2008/10/16 um 00:12:16 Uhr
Hey ihr beiden und Danke für die Antworten, jedoch passt etwas nich mit
[...] denn er gibt immer die zeile aus die ich zuvor geschrieben hab: z.B.
XYZ : hi .... <- wenn ich das eingebe erscheint "ECHO ist
ausgeschaltet (OFF).
XYZ : hi 2 .... <- wenn ich das eingebe erscheint "hi" :-P
könnt ja mal sofern ich noch einen Nerv dafür habt eben die 2 .txt erstellen und nachgucken =D
MFG Fear
01.
FOR /F "delims=" %%i in (hi.txt) do set zeile=%%i 02.
echo %zeile% XYZ : hi .... <- wenn ich das eingebe erscheint "ECHO ist
ausgeschaltet (OFF).
XYZ : hi 2 .... <- wenn ich das eingebe erscheint "hi" :-P
könnt ja mal sofern ich noch einen Nerv dafür habt eben die 2 .txt erstellen und nachgucken =D
MFG Fear
9
Feardotcom schreibt am 2008/10/16 um 12:17:50 Uhr
Huhu Bastla!
Jap ich hab die Reihenfolge eingehalten.
Hier mal die 2 codes:
Einmal die Eingabe:
[...] und die Ausgabe:
sieht das richtig aus ? theoretisch sollte es klappen aber wie gesagt er nimmt nich die letzte sondern die die ich davor getippt hab.
Gruß Fear
Jap ich hab die Reihenfolge eingehalten.
Hier mal die 2 codes:
Einmal die Eingabe:
01.
@echo off 02.
:B 03.
set /p username=Username: 04.
echo Type "username" to choose a new username. 05.
echo. 06.
:A 07.
set /p Eingabe=Eingabe (%username%) : 08.
if "%Eingabe%"=="username" Goto B 09.
echo %username%: %Eingabe% >> hi.txt 10.
echo flag > flag 11.
goto A01.
@echo off 02.
cls 03.
echo. > hi.txt 04.
:A 05.
if exist flag ( 06.
FOR /F "delims=" %%i in (hi.txt) do set zeile=%%i 07.
echo\%zeile% 08.
del flag 09.
) 10.
Goto AGruß Fear
10
bastla schreibt am 2008/10/16 um 17:24:25 Uhr
Hallo Feardotcom!
Versuch es mit der folgenden Ausgabe:
Der Hauptunterschied besteht darin, dass %zeile% jetzt nicht mehr im "if"-Konstrukt ausgelesen wird und dadurch sofort zur Verfügung steht. In der vorigen Variante wurde der Wert von %zeile% bereits am Beginn des "if"-Teiles ermittelt (da "delayedexpansion" nicht "eingeschaltet" war), sodass zwar der neue Wert von %zeile% richtig aus der Datei gelesen, aber erst beim nächsten "if" auch als Variableninhalt erkannt wurde.
Die Alternative, nämlich
hätte den Nachteil, dass ein "!" verschluckt, bzw bei zwei vorkommenden "!" innerhalb einer Zeile auch der Teil dazwischen (da dann als Variablenname interpretiert) nicht ausgegeben würde.
Grüße
bastla
P.S.: Die Variable %username% wird vom System gesetzt und sollte durch Deinen "Eingabe"-Batch besser nicht überschrieben werden, daher zB %UsrName% verwenden ...
Versuch es mit der folgenden Ausgabe:
01.
@echo off & setlocal 02.
cls 03.
echo. > hi.txt 04.
:A 05.
if not exist flag goto :A 06.
set zeile= 07.
FOR /F "delims=" %%i in (hi.txt) do set "zeile=%%i" 08.
echo\%zeile% 09.
del flag 10.
goto :ADie Alternative, nämlich
01.
@echo off & setlocal enabledelayedexpansion 02.
cls 03.
echo. > hi.txt 04.
:A 05.
if exist flag ( 06.
FOR /F "delims=" %%i in (hi.txt) do set zeile=%%i 07.
echo\!zeile! 08.
del flag 09.
) 10.
Goto AGrüße
bastla
P.S.: Die Variable %username% wird vom System gesetzt und sollte durch Deinen "Eingabe"-Batch besser nicht überschrieben werden, daher zB %UsrName% verwenden ...
11
Feardotcom schreibt am 2008/10/16 um 21:08:51 Uhr
Hallo Bastla und Miniversum!
Es klappt ! =D herzlichen Dank ... ihr habt es zur Vollendung gebracht endlich ist der Infounterricht nicht mehr so langweilig !!!
Denn der Admin hat net send deaktiviert
Allerdings macht er bei leerer Eingabe verständlicherweise die zeile davor, weil ja nix in die .txt geschrieben wird, wie lautet also der befehl dafür, dass er bei leerer Eingabe auch ne leere Zeile in die .txt schreibt?
[...] das will nich gehn =D
MFG Fear
Es klappt ! =D herzlichen Dank ... ihr habt es zur Vollendung gebracht endlich ist der Infounterricht nicht mehr so langweilig !!!
Denn der Admin hat net send deaktiviert
Allerdings macht er bei leerer Eingabe verständlicherweise die zeile davor, weil ja nix in die .txt geschrieben wird, wie lautet also der befehl dafür, dass er bei leerer Eingabe auch ne leere Zeile in die .txt schreibt?
01.
if "%Eingabe%"=="" echo. >> hi.txt[...] das will nich gehn =D
MFG Fear




