Top-Themen

Aktuelle Themen (A bis Z)

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

Frage Entwicklung Batch & Shell

GELÖST

Batchdatei soll immer nur die neuste zeile aus einer .txt auslesen und anzeigen

Mitglied: Feardotcom

Feardotcom (Level 1) - Jetzt verbinden

14.10.2008, aktualisiert 16.10.2008, 4164 Aufrufe, 11 Kommentare

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
Mitglied: miniversum
14.10.2008 um 13:11 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:
01.
FOR /F "delims=" %%i in (hi.txt) do set zeile=%%i 
02.
echo %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.
Bitte warten ..
Mitglied: Feardotcom
14.10.2008 um 14:28 Uhr
Wie sähe das dann ca. mit deinem zusätzlichen Tip aus?Kannst du ein beispiel geben?
Ich bin jetzt soweit :

01.
@echo off 
02.
cls  
03.
FOR /F "delims=" %%i in (hi.txt) do set zeile=%%i  
04.
echo %zeile%
wenn das allerdings so aussieht, ruft der das einmal auf und beendet das doch gleich wieder?
Bitte warten ..
Mitglied: miniversum
14.10.2008 um 20:05 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:
01.
echo %username%: %Eingabe% >> hi.txt
kommt noch diese Zeile dazu:
01.
echo flag>flag
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:
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:loop
Bitte warten ..
Mitglied: Feardotcom
15.10.2008 um 15:52 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 ....
Bitte warten ..
Mitglied: bastla
15.10.2008 um 18:37 Uhr
Hallo Feardotcom!

... flag datei das erste mal erstellt, ist sie doch durchgehend da ...
Nicht, wenn Du noch als Zeile 7 einfügst:
01.
del flag
Grüße
bastla
Bitte warten ..
Mitglied: miniversum
15.10.2008 um 18:58 Uhr
Ups ja das war auch so gedacht. hatte ich vergessen zu coden. in der erklärung des Ablaufs ists ja erwähnt.
Bitte warten ..
Mitglied: Feardotcom
16.10.2008 um 00:12 Uhr
Hey ihr beiden und Danke für die Antworten, jedoch passt etwas nich mit
01.
FOR /F "delims=" %%i in (hi.txt) do set zeile=%%i  
02.
echo %zeile% 
[...] 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
Bitte warten ..
Mitglied: bastla
16.10.2008 um 00:22 Uhr
Hallo Feardotcom!

Die Reihenfolge
01.
echo %username%: %Eingabe% >> hi.txt 
02.
echo flag>flag
hast Du so eingehalten?

Gegen die Ausgabe "ECHO ist ausgeschaltet (OFF)." hilft übrigens
01.
echo\%zeile%
Grüße
bastla
Bitte warten ..
Mitglied: Feardotcom
16.10.2008 um 12:17 Uhr
Huhu Bastla!
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 A
[...] und die Ausgabe:
01.
@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 A
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
Bitte warten ..
Mitglied: bastla
16.10.2008 um 17:24 Uhr
Hallo Feardotcom!

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 :A
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
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 A
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 ...
Bitte warten ..
Mitglied: Feardotcom
16.10.2008 um 21:08 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?

01.
if "%Eingabe%"=="" echo. >> hi.txt
[...] das will nich gehn =D

MFG Fear
Bitte warten ..
Ähnliche Inhalte
Entwicklung
Bestimmte zeile aus txt datei auslesen und sich aus zeile 100 einen wert anzeigen lassen ?
gelöst Frage von bob777Entwicklung12 Kommentare

Hallo Suche einen Weg sich aus einer .config (txt) datei einen Wert Spielzeit auszulesen und anzuzeigen? Kann das irgendwer ...

Microsoft Office
Excel Zeilen in eine Zeile anzeigen
gelöst Frage von rw72Microsoft Office2 Kommentare

Hallo, ich habe eine Excel Tabelle mit dem Aufbau Nummer Text 0000001 Test2 0000001 Test1 0000002 Titel 0000002 Titel2 ...

PHP
TXT Datei auslesen und bestimmte Zeilen in Variable setzen
gelöst Frage von 126594PHP11 Kommentare

Hallo zusammen, vorweg muss ich sagen, ich bin (bis jetzt) absoluter Neuling was PHP angeht. Ich will aus einer ...

Batch & Shell
Einzelne Zeilen in txt Datei speichern und auslesen
gelöst Frage von noah1400Batch & Shell7 Kommentare

Liebe Forum-Mitglieder Ich habe da so eine Frage: Ich bin gerade dabei ein PW abfrage mit Batch zu machen. ...

Neue Wissensbeiträge
Microsoft

Letzte Updates für Win10 und Server2016 müssen bei Bedarf über den Update catalogue in den WSUS importiert werden!

Tipp von DerWoWusste vor 1 StundeMicrosoft

automatisch kommt da nichts an im WSUS und auch nicht im SCCM. Siehe Hinweise zum Bezug der jeweils neuesten ...

Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 3 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 3 TagenSicherheit13 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Heiß diskutierte Inhalte
Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall10 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS9 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen9 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...

Windows Netzwerk
Ist ein Portforwarding auf einen PC ohne lauschendes Programm ein (großes) Sicherheitsproblem?
Frage von PluwimWindows Netzwerk8 Kommentare

Hallo zusammen, zur Fernwartung eines Rechners an einem anderen Ort nutze ich VNC. Da dieser Rechner einfach nur eine ...