Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Unterschlagung der letzten Zeile der FINDSTR-Ausgabe

Frage Entwicklung Batch & Shell

Mitglied: -heny-

-heny- (Level 1) - Jetzt verbinden

03.03.2008, aktualisiert 04.03.2008, 6098 Aufrufe, 7 Kommentare

Hallo,

ich bin beim Schreiben einer Batch-Datei auf ein Problem gestoßen, welches ich sehr kurios finde und ebenfalls die Gründe für diese Merkwürdigkeit nicht verstehe.

Gehen wir davon aus, dass ich eine Textdatei, sowie ein Batch-File habe.

beispiel.txt
01.
Zeile 1 
02.
Zeile 2 
03.
Zeile 3 
04.
Zeile 4 
05.
Zeile 5
beispiel.bat
01.
@echo off 
02.
findstr /n $ beispiel.txt 
03.
pause
Beide Dateien befinden sich im selben Verzeichnis. Der FINDSTR-Befehl funktioniert so weit ohne Probleme, er versieht die Zeilen der Textdatei mit Zeilennummern und gibt sie aus.

Schaut man sich den Output jetzt allerdings etwas genauer an, so fällt auf, dass die letzte Zeile der Textdatei nicht ausgegeben wird.

Output: beispiel.bat
01.
1:Zeile 1 
02.
2:Zeile 2 
03.
3:Zeile 3 
04.
4:Zeile 4 
05.
Drücken Sie eine beliebige Taste . . .
Woran liegt dies? Das ganze ist keine Ausnahme, ich habe es mit mehreren Fällen probiert und es macht keinen Unterschied, ob die letzte Zeile der Textdatei eine Leerzeile ist oder beliebigen Inhalt enthält.
Kann man dies umgehen bzw. verhindern, da es beim Auslesen/Schreiben in Textdateien wesentlich nervt und man Workarounds bauen muss?

Ich wäre euch zu großem Dank verpflichtet, wenn ihr mir helfen könntet.

Gruß,
heny
Mitglied: Biber
03.03.2008 um 21:12 Uhr
Moin -heny-,

kein Grund zur Panik... works as designed, wie die Biber sagen.

Du lässt suchen nach allen Zeilen mit CRLF am Ende und die letzte Zeile hat halt keinen.
Aber einen Zeilenanfang haben alle Zeilen.
01.
(=21:09:16  D:\temp=) 
02.
REM  ### findstr /n $ e:\log.txt  ## reicht auch... 
03.
>findstr /n "$" e:\log.txt 
04.
1:Zeile 1 
05.
2:Zeile 2 
06.
3:Zeile 3 
07.
4:Zeile 4 
08.
 
09.
(=21:09:27  D:\temp=) 
10.
REM  ### findstr /n ^^ e:\log.txt  ## ginge syntaktisch auch, sieht aber nicht aus... 
11.
>findstr /n "^" e:\log.txt 
12.
1:Zeile 1 
13.
2:Zeile 2 
14.
3:Zeile 3 
15.
4:Zeile 4 
16.
5:Zeile 5 
17.
(=21:09:30  D:\temp=)
Kannst beruhigt schlafen heute...

...und M$ auch... keine Unterschlagung...

Grüße
Biber
Bitte warten ..
Mitglied: miniversum
03.03.2008 um 21:33 Uhr
Ist mir auch schon aufgefallen in nem andern Zusammenhang.
Was auch geht (und auch gut aussieht ;) ):
findstr /n .* e:\log.txt

miniversum
Bitte warten ..
Mitglied: Biber
03.03.2008 um 21:44 Uhr
Hmmja, miniversum,

die echte Kurzform von findstr WTF "inmyfile.txt" ist aber
findstr /n . e:\log.txt

[ohne "*"; der Punkt bedeutet ja schon "ein beliebiges Zeichen, und wenn es nur ein Zeilenanfang ist...]

Grüße
Biber
Ja, WTF bedeutet "Watt tu findest...
Bitte warten ..
Mitglied: miniversum
04.03.2008 um 08:16 Uhr
Hmmja, miniversum,

die echte Kurzform von findstr WTF "inmyfile.txt" ist aber
> findstr /n . e:\log.txt

[ohne "*"; der Punkt bedeutet ja schon "ein beliebiges Zeichen, und wenn es nur ein Zeilenanfang ist...]

Grüße
Biber
Ja, WTF bedeutet "Watt tu findest...

Da muss ich dir wiedersprechen.
Angenommen deine "inmyfile.txt" sieht so aus:
abc
ab
a

a
ab
abc
Dann würde bei den einzelnen Varianten folgendes rauskommen:
01.
 E:\>findstr /n .* inmyfile.txt 
02.
1:abc 
03.
2:ab 
04.
3:a 
05.
4: 
06.
5:a 
07.
6:ab 
08.
7:abc 
09.
E:\>findstr /n ^^ inmyfile.txt 
10.
1:abc 
11.
2:ab 
12.
3:a 
13.
4: 
14.
5:a 
15.
6:ab 
16.
7:abc 
17.
E:\>findstr /n . inmyfile.txt 
18.
1:abc 
19.
2:ab 
20.
3:a 
21.
5:a 
22.
6:ab 
23.
7:abc
Ohne das "*" fehlt also die vierte Zeile.
Das ".*" bewirkt aber das gleiche wie ein "^^"

miniversum
Bitte warten ..
Mitglied: Biber
04.03.2008 um 08:30 Uhr
@miniversum

Stimmt, hast recht.
Logisch herleiten kann ich dieses Verhalten nicht wirklich.
Aber ich nehms hin...

Grüße
Biber
Bitte warten ..
Mitglied: miniversum
04.03.2008 um 08:43 Uhr
Ich hätte da nen Erklärungsversuch.
"." gibt ja an das irgentein Zeichen da stehen muss.
In einer Leren Zeile steht ja garkein Zeichen. Ein Zeilenanfangszeichen gibts ja eigentlich nicht. Nur Zeilenumbruch.
Das "*" steht hingegen lauf Hilfe von findstr dafür das dieses zeichen mehrmals vorkommt, oder garnicht.
Garnicht trift also in dem Fall zu das dort auch ncihts in dieser Zeile steht.
Also sucht er nach irgenteinem Zeichen das entweder mehrmals wiederholt wird (also beliebige Zeichenfolge) oder gernicht vorkommt (also Leere Zeile)
Bitte warten ..
Mitglied: Biber
04.03.2008 um 08:49 Uhr
@miniversum

Jepp, jetzt habe ich es auch verstanden.
".*" == "Ein beliebiges Zeichen keinmal, einmal oder öfter".
"." == "Ein beliebiges Zeichen, aber mindestens eines"

Danke
Biber
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell funktioniert nicht richtig beim Auslesen der letzten Zeile (5)

Frage von Peter32 zum Thema Batch & Shell ...

Batch & Shell
Parsen mehrer Dateien und Ausgabe je einer Zeile (1)

Frage von grka zum Thema Batch & Shell ...

Windows Server
Windows Remote App - Ausgabe in lokales Office (1)

Frage von fluluk zum Thema Windows Server ...

Python
Python - ausgabe formatieren

Frage von BadFsaadKl zum Thema Python ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...