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, 7560 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
Microsoft Office
NETWORKDAYS.INTL funktioniert
Frage von petra.kMicrosoft Office11 Kommentare

Excel 2003 Hallo zusammen, meine Formel =_xlfn.NETWORKDAYS.INTL(DATUM(2017;1;1);DATUM(2017;12;31);"1000111") beim Versuch, sie auf 2018 zu ändern, funktioniert sie nicht mehr. Fehlermeldung: ...

Windows Netzwerk

RDP über VPN - Wlan funktioniert, Kabelverbindung funktioniert nicht

gelöst Frage von danneiWindows Netzwerk5 Kommentare

Hallo zusammen, ich möchte mich mit meinen Notebook von zu Hause aus mit dem Firmennetzwerk über VPN verbinden, um ...

Server

Domainweiterleitung funktioniert nicht

Frage von TestTyp12Server2 Kommentare

Hallo zusammen, ich habe eine Fritzbox mit einem IPv6 und DSLite Anschluss Zuhause. Ich habe mir außerdem einen Server ...

Windows Netzwerk

Remotedesktopverbindung funktioniert, aber

Frage von Sascha.HWindows Netzwerk10 Kommentare

Hallo liebe Forengemeinde :-) Ich habe folgendes Problem: Wie haben eine Reihe an Software auf Servern installiert, auf denen ...

Neue Wissensbeiträge
Humor (lol)
Und wie seid Ihr gegen Cyberattacken gewappnet?
Information von DerWoWusste vor 1 TagHumor (lol)5 Kommentare

aber wo ist der Hammer? :-)

Sicherheit
Ein weiterer Microsoft-Stirnklatscher
Information von DerWoWusste vor 2 TagenSicherheit7 Kommentare

Habe gerade einen Artikel zu einem Sicherheitsproblem gefunden, welches mir zu seiner Zeit (gepatcht 2015) wohl durchgerutscht ist. Es ...

Windows 10
Upgradepfade Windows 10 LTSC
Erfahrungsbericht von Datenreise vor 2 TagenWindows 10

Nur eine kurze Info, für diejenigen, die es interessiert, da es hierzu im Netz aus nachvollziehbaren Gründen nicht allzu ...

Administrator.de Feedback
Wartungsarbeiten heute Nacht (Update)
Information von Frank vor 2 TagenAdministrator.de Feedback10 Kommentare

Hallo User, durch Umbauarbeiten in unserem Rechenzentrum (am Backbone) kann es heute Nacht (14-15.01.2019) zu kurzen Ausfällen unserer Seite ...

Heiß diskutierte Inhalte
Windows 10
Windows 10 - kein Boot mehr nach Domänenaustritt
gelöst Frage von Ghost108Windows 1025 Kommentare

Hallo zusammen, habe hier eine Windows 10 Maschine, die ich gerne aus der Domäne austreten lassen möchte. Nach Austritt ...

Microsoft
SFirm 4.0 auf Terminalserver startet für jeden angemeldeten Benutzer diverse Dienste
Frage von Frank84Microsoft24 Kommentare

Hallo zusammen, wir verwenden Sfirm 4.0 auf einem Terminalserver (der SQL Server ist auf einem separaten Server), das Problem ...

Internet
Google-Suchergebnisse, Schnelleinblendung, woher kommt der Inhalt?
gelöst Frage von departure69Internet17 Kommentare

Hallo. Ich bin der Systembetreuer einer kleinen Gemeinde in Süddeutschland. Wir betreiben auch eine Leihbücherei. Eine Kundin hat letzten ...

Windows Server
Frage bzgl. Windows Server Lizenzierung Hyper-V
gelöst Frage von g0drealmWindows Server15 Kommentare

Guten Morgen, da wir demnächst wegen unserem neuen ERP-System einen Hyper-V Server bekommen, wollte ich vorab noch eine Sache ...