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

gelöst Letzte Zeile auslesen funktioniert nicht

Mitglied: noadmin

noadmin (Level 1) - Jetzt verbinden

03.11.2006, aktualisiert 30.11.2006, 7537 Aufrufe, 9 Kommentare

habe mir heute ein Beispiel aus einem Beitrag hier im Forum (einzelne Zeile aus Textdatei auslesen) entnommen.
erste und n-te Zeile funktioniert wunderbar nur die letzte Zeile nicht. Habe leider fast keine Erfahrungen mit Batchdateien und kann den Fehler nicht finden.

Hier nochmal der Code - bei letzter Zeile erscheint bei mir immer nur Echo ist ausgeschaltet (off)
In meiner TXT stehen nur Zahlen, aber das sollte nicht die Ursache sein.

01.
::-------LineToVar.bat 
02.
@echo off 
03.
echo ----C:\testbat\angnr.txt---- 
04.
Type C:\testbat\angnr.txt 
05.
Echo ----ende C:\testbat\angnr.txt 
06.
:: Letzte Zeile in %Var% speichern 
07.
for /F "Tokens=*" %%i in (C:\testbat\angnr.txt) do Set var=%%i 
08.
Echo Letzte Zeile...: %var% 
09.
Set var= 
10.
::Erste Zeile in %var% speichern 
11.
for /F "Tokens=*" %%i in (C:\testbat\angnr.txt) do call :setvarOnce "%%i" 
12.
Echo Erste Zeile....: [%Var%] 
13.
Set var= 
14.
Pause 
15.
:: 
16.
:: n-te Zeile in %var% speichern; n ist im Beispiel 3 
17.
Set /a "cnt=1" 
18.
Set /a "n=3" 
19.
for /F "Tokens=*" %%i in (C:\testbat\angnr.txt) do call :setvarFixLine %n% "%%i" 
20.
Echo n-te Zeile, n=%n%: [%Var%] 
21.
Pause 
22.
goto :eof 
23.
~~~ 
24.
:setvarOnce --Eine Variable einmal setzen 
25.
if "%var%"=="" Set "Var=%~1" 
26.
goto :eof 
27.
 
28.
~~~ 
29.
:setvarFixLine 
30.
If %cnt%==%1 Set "Var=%~2" 
31.
Set /a "cnt+=1" 
32.
goto :eof
Mitglied: Dani
03.11.2006 um 17:23 Uhr
Hi,
steht in der letzten Zeile wirklich ein Text oder hast noch mit ENTER/RETURN einen Absatz gemacht?!


Gruß
Dani
Bitte warten ..
Mitglied: noadmin
03.11.2006 um 17:31 Uhr
oder hast noch mit ENTER/RETURN einen Absatz gemacht
Danke Dani! Ich hätte schon heute mittag mal fragen sollen...
Bitte warten ..
Mitglied: Biber
03.11.2006 um 18:26 Uhr
Anmerkung dazu:

Die Aussage "Zeile x finden" ist nicht ganz richtig bzw. nicht ganz verlässlich.

Die beispielhaften Zeilen oben funktionieren dann, wenn die durchsuchte Textdatei keine Leerzeilen enthält.
Denn Leerzeilen werden vom dem "FOR /F"-Befehl ignoriert, d.h. nicht mitgezählt.

Wenn denn wirklich eine bestimmte Zeile 50 gemeint ist (sprich: im Texteditor oder im Notepad wird mir diese Zeile als "Zeile 50" angezeigt) und ist sind aber Leerzeilen vorher im Text enthalten...

...dann würde die FOR /F-Anweisung die 50ste "Zeile mit Inhalt" finden.
Dann müsste man/frau ausweichen auf "FindStr.exe"
01.
findstr /n  "$" C:\testbat\angnr.txt|findstr "17:" 
02.
### würde Zeile 17 anzeigen am CMD-Prompt 
03.
### in der Form "17: <i>zeileninhalt von Zeile 17</i>" 
04.
### -bzw-: 
05.
... 
06.
for /f "delims=: tokens=2*" %i in ('findstr /n  "$" C:\testbat\angnr.txt|findstr^|findstr "17:"') do echo %i 
07.
### würde nur den Inhalt der Zeile 17 (ohne das "17:" vorweg) anzeigen 
08.
### -bzw- im Batch mit zwei Prozentzeichen: 
09.
... 
10.
for /f "delims=: tokens=2*" %%i in ('findstr /n  "$" C:\testbat\angnr.txt|findstr^|findstr "17:"') do echo %%i
[Aber oben im Schnipsel sollte ja auch nur die Strategie gezeigt werden.]

Gruß
Biber
Bitte warten ..
Mitglied: snadboy
29.11.2006 um 14:07 Uhr
Hallo,

habe im Forum dazu folgendes gefunden
:: Letzte Zeile in %Var% speichern
for /F "Tokens=*" %%i in (C:\testbat\angnr.txt) do Set var=%%i
Echo Letzte Zeile...: %var%
Set var=


kann mir jemand sagen wie man aus einer TXT Datei mit mehreren Zeilen
die komplette Datei auslesen kann um die einzelenen Zeilen dann in
Variablen zu speichern um diese dann später mit echo auszugeben oder
in eine neue Datei speichern zu können !

Gibt es in Kombination mit dem for /F Befehl eine Schleife ähnlich wie
while not eof - also alle zeilen auslesen bis dateiende erreicht ist ???
Bitte warten ..
Mitglied: Biber
29.11.2006 um 15:33 Uhr
Moin snadboy,

willkommen im Forum.
Grundsätzlich ist es -wenn irgendwie machbar- sinnvoller, bei einer FOR/F-Verarbeitung ZEILENweise zu lesen und auch diese Zeile wieder sofort zu schreiben.

Natürlich gehen auch andere Konstrukte - aber da kann man/frau sich eben nur an andere, besser geeignete Skriptsprachen annähern.
Was dem Batch fehlt, ist weniger die While-not-eof-Lese-Möglichkeit als vielmehr eine Array/Index-Mimik.

Diese Array/Index-Mimik kannst Du so nachbilden:
Kurze Demo am CMD-Prompt:
01.
>set /a cnt=1 & for /L %i in (1,1,9) do @set "Ln[!cnt!]=zeile!cnt!" & @set /a "cnt+=1" 
02.
>set ln 
03.
Ln[1]=zeile1 
04.
Ln[2]=zeile2 
05.
Ln[3]=zeile3 
06.
Ln[4]=zeile4 
07.
Ln[5]=zeile5 
08.
Ln[6]=zeile6 
09.
Ln[7]=zeile7 
10.
Ln[8]=zeile8 
11.
Ln[9]=zeile9
Bezogen auf eine Datei
01.
@echo off & setlocal EnableDelayedExpansion 
02.
:: Letzte Zeile in %ln[!cnt!]% zb %ln[127]% speichern 
03.
Set /a cnt=0 
04.
for /F "Tokens=*" %%i in (C:\testbat\angnr.txt) do ( 
05.
       Set /a "cnt+=1" 
06.
       Set "ln[!cnt!]=%%i" 
07.
08.
Echo Zeilenanzahl ...: %cnt%      
09.
Echo Letzte Zeile: %ln[!cnt!]% 
10.
...
Das heißt, Du hast dann alle 127 Zeilen in Variablen %ln[1]% ...%ln[127]% bei 127 gelesenen Zeilen.

In dem BatchTut II ("Workshop Batch for Runaways Tart II - Ein bisschen Handwerkszeuch") hier im Forum unter "Batch & Shell" habe ich das mal vorgeturnt.

Gruß
Biber
Bitte warten ..
Mitglied: snadboy
29.11.2006 um 17:15 Uhr
Hallo Biber,

vielen Dank für die schnelle und sehr gute Antwort !

die TXT Dateien die als LOG bei uns gespeichert werden haben meist
unterschiedliche anzahl von Zeilen !

Kannst du mir noch sagen wie ich das ganze noch so variabel wenn
möglich gestalten könnte das ich zunächst ermitteln kann wie viele
zeilen überhaupt in der TXT datei sind und somit dann auch die ausgabe
ebenfalls variabel gestalten kann und nicht mit %In[1]% bis %In[127]%
arbeiten müsste wie in deinem Vorschlag !

Besten Dank schon im Voraus

Grüsse Snadboy
Bitte warten ..
Mitglied: Biber
29.11.2006 um 17:43 Uhr
Moin snadboy,

na, da beschreib doch erstmal genauer, wo ihr hinwollt...

Gerade beim Auswerten von Logdateien halte ich es für unwahrscheinlich, dass ihr die per FOR/F-Schleife durchwackeln müsst und dann nach -zig Einzelzeilenprüfungen im Batch die Zeilen 18, 23, 77 und die Zusammenfassung aus den letzten 4 Zeilen anzeigt..

Für diesen Zweck ist sicherlich eine Vor-Bearbeiting mit FindStr.exe/Find.exe sinnvoller und schneller.
Da bin ich sicher - denn ich bin überhaupt erst durch das Thema "Auswertung von Logdateien zu Batchdateien gekommen

Ansonsten vorab:
Die letzte Zeile ermitteln (bzw. die Anzahl Nicht-Leerzeilen):
01.
for /f %%i in (deineLogdatei.txt) do set /a AnzZeilen+=1
[AnzZeilen braucht vorher nicht mit "Set /a AnzZeilen=0" definiert werden;
um sicherzugehen, dass da aber nicht 676 drinsteht, würde ich es tun.]

Um am CMD-Prompt zu vergleichen, ob das Ergebnis stimmt:
01.
>findstr /n "." deineLogDatei.txt
Poste erst mal Deine Anforderungen bitte.

Gruß
Biber
Bitte warten ..
Mitglied: snadboy
29.11.2006 um 21:26 Uhr
Hallo Biber,

ich möchte folgendes machen, wir loggen in unsere Windows Domäne die Ameldungen
von Zeitarbeitsusern in einer Datei im Netlogon Verzeichnis names anmeldung.txt.

Die Datei hat folgenden Inhalt:

Computer: NOTE1
Benutzer: user1
Anmeldung am:
Datum: 29.11.2006
Uhrzeit: 21:05:28,38
Domäne: domain.com

Da sich am PC teilweise mehrer/viele Benutzer anmelden ( Teilzeitkräfte ) ist die Datei
tagesabhängig unterschiedlich groß ( unterschiedliche Anzahl von Zeilen )

Wir möchten nun aus der Datei per Batch den Inhalt auslesen - Zeilenanzahl wie
gesagt ist variabel, die einzelnen Werte ( Zeilen ) sollten dann in Variablen
gespeichert sein um diese dann z.B. mit echo Zeilenweise auszugeben oder mit
echo und Zusatz z.B. in eine HTML Ausgabe umzuleiten !

set htmlout=logfile.html
echo Zeile1=%Zeile1%^<BR /^> >>%htmlout%
start %htmlout%

ich müsste also Zeile auslesen diese in Variable %zeile1% setzen, damit
ich sie mit echo %zeile1% + den HTML Zusatu in die neue HTML Ausgabe datei
speichern kann - das gleiche dann mit Zeile 2 usw. bis das Dateiende erreich ist.

Bei deinem ersten Vorschlag haben wir die Anzahl der Zeilen in %cnt% stehen,
%ln[!cnt!]% ergibt gar keinen Wert. Wie kann nun oberes Szenario lösen

@echo off & setlocal EnableDelayedExpansion
:: Letzte Zeile in %ln[!cnt!]% zb %ln[127]% speichern
Set /a cnt=0
for /F "Tokens=*" %%i in (anmeldung.txt) do (
Set /a "cnt+=1"
Set "ln[!cnt!]=%%i"
)
Echo Zeilenanzahl ...: %cnt%
Echo Letzte Zeile: %ln[!cnt!]% ( Bei diesem Echo erscheint kein Wert ???

Besten Dank für deine Mithilfe !
Bitte warten ..
Mitglied: Biber
30.11.2006 um 07:21 Uhr
Moin snaddelchen,

sorry, habe gestern tatsächlich nicht getestet und es muss in der Tat so aussehen:
01.
::--- snipp lineDemo.bat 
02.
@echo off & setlocal EnableDelayedExpansion 
03.
:: Letzte Zeile in !ln[%cnt%]! z.B. %ln[127]% speichern und davor %ln[1]%...%ln[126]% :) 
04.
Set /a cnt=0 
05.
for /F "Tokens=*" %%i in (%1) do ( 
06.
       Set /a "cnt+=1" 
07.
       Set "ln[!cnt!]=%%i" 
08.
09.
Echo Zeilenanzahl ...: %cnt% ;Inhalt letzte Zeile steht in  %%ln[%cnt%]%% 
10.
Echo [Inhalt:] !ln[%cnt%]! 
11.
::----snapp linedemo.bat
Demo am CMD-Prompt:
01.
>lineDemo.bat Beispiel.txt 
02.
Zeilenanzahl ...: 27 ;Inhalt letzte Zeile steht in  %ln[27]% 
03.
[Inhalt:] regsvr32 -u -s scanemal.dll
[was auch mit der letzten Zeile übereinstimmt.]

Also... bei der Ausgabe/dem Lesen der Pseudo-Arraywerte AUSSEN das Ausrufungszeichen; INNEN das %-Zeichen.

So far erstmal (Zeit für ein Käffchen bei mir)
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Powershell funktioniert nicht richtig beim Auslesen der letzten Zeile

gelöst Frage von Peter32Batch & Shell5 Kommentare

Hallo, mein code lautet: Wieso erhalte ich als Ausgabe: Kann ich eigentlich auch die letzte Zeile direkt aus der ...

Batch & Shell

Textdatei Zeile für Zeile auslesen

Frage von RIPUEDBatch & Shell

Hallo, ich würde gerne mit einem Batch-Skript Zeilen aus einer Textdatei einzeln und nacheinander auslesen und diese dann nach ...

Debian

Letzte Zeile lesen und einfügen

gelöst Frage von Fenris14Debian4 Kommentare

Guten Tag, ich versuche mich mal wieder ein wenig an Scripten und habe hier jetzt das Problem das ich ...

Batch & Shell

Die letzten 5 Zeilen aus einem Logfile auslesen und in umgekehrter chronologischer Reihenfolge mit Echo ausgeben

gelöst Frage von ZendaraBatch & Shell3 Kommentare

Hallo, Ich versuche einen Batch zu schreiben der eine IP anpingt und protokolliert sobald der Ping unterbrochen wird. Unteranderem ...

Neue Wissensbeiträge
Ausbildung

Linux-Ausstieg in Niedersachsen - Windows statt Bugfix

Information von StefanKittel vor 1 TagAusbildung31 Kommentare

Sind ja nur Steuergelder

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 3 TagenSpeicherkarten4 Kommentare

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 4 TagenSicherheit1 Kommentar

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 4 TagenHardware3 Kommentare

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Ausbildung
Linux-Ausstieg in Niedersachsen - Windows statt Bugfix
Information von StefanKittelAusbildung30 Kommentare

Sind ja nur Steuergelder

Vmware
Offene LDAP-Server in AS
gelöst Frage von obi-wan-kenobiVmware19 Kommentare

Hallo alle Miteinander, ich habe ein Problem, unsere VM-Ware Appliance (Version. 6.5.0.10000) ist scheinbar angreifbar. Wir haben eben die ...

Windows 10
Windows 10 Spracherkennung - Eure Meinungen?
Frage von honeybeeWindows 1014 Kommentare

Hallo, wollte heute mal aus Neugier die Spracherkennung unter Windows 10 (Version 1803) ausprobieren und war mehr wie enttäuscht. ...

Windows Userverwaltung
Passwortwechsel Zeitpunkt festlegen
Frage von Looser27Windows Userverwaltung13 Kommentare

Guten Morgen liebe Kolleginnen und Kollegen, da es eine Userin in meinem Urlaub geschafft hat, sich vom AD vollständig ...