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, 7524 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
Windows 10

Mikrofon von Headset geht nach Update auf Windows 10 1803 nicht mehr

Tipp von Deepsys vor 21 StundenWindows 10

Ich verwende ein Plantronics Headset das per USB mit dem Windows 10 PC verbunden ist. Damit kann ich auch ...

Video & Streaming

Ruckelfreies Fernsehen auf Smartphone oder Tablet - in SD oder gar HD - Eine Alternative zum Fritz DVB-C Receiver

Anleitung von power-user vor 1 TagVideo & Streaming7 Kommentare

Wer kennt das nicht: Man möchte gemütlich auf dem Balkon sitzen und vielleicht grillen und dabei das WM-Spiel gucken ...

Erkennung und -Abwehr
Trendmicro WFBS 10 ist in deutsch verfügbar!
Tipp von VGem-e vor 1 TagErkennung und -Abwehr4 Kommentare

Servus Kollegen, downloadbar unter

Windows Update

Microsoft Patchday Juni 2018 - BSOD, obwohl noch kein Patch freigegeben

Erfahrungsbericht von diemilz vor 1 TagWindows Update5 Kommentare

Hallo zusammen, wir hatten hier letzte Woche ein massives Problem. Alles begann damit, dass ein Mitarbeiter kurz vor Feierabend ...

Heiß diskutierte Inhalte
Windows Userverwaltung
User Überwachung
Frage von YellowcakeWindows Userverwaltung33 Kommentare

Hey ich habe von unserem neuem Datenschutzbeauftragten ein kleines Horror Paket bekommen. Ich soll wenn es möglich ist, das ...

Outlook & Mail
Nachweis des Löschens einer Email nach DSGVO in Outlook
Frage von linuxadmOutlook & Mail18 Kommentare

Hallo Forum, wie wahrscheinlich viele von Euch kämpfe ich mit der Umsetzung der DSGVO bei meinen Kunden. Konkret geht ...

Video & Streaming
PVR-Projekt - RTSP - Streams auf NAS aufnehmen - welche Tools sind am leichtesten einzurichten ?
Frage von power-userVideo & Streaming18 Kommentare

Hallo zusammen, hier die Details zur obigen Frage: AAusgangspunkt / Grundvoraussetzungen Wir betreiben hier ein kleines Heimnetzwerk. 2 Smartphones, ...

Batch & Shell
Powershell Netzwerkdrucker auflisten
gelöst Frage von schiggi85Batch & Shell18 Kommentare

Hallo zusammen, ich möchte mit dem invoke-command bei einem remoteclient die installierten Netzwerkdrucker des Users abfragen. Nur klappt das ...