Unterschlagung der letzten Zeile der FINDSTR-Ausgabe
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
beispiel.bat
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
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
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
Zeile 1
Zeile 2
Zeile 3
Zeile 4
Zeile 5
beispiel.bat
@echo off
findstr /n $ beispiel.txt
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
1:Zeile 1
2:Zeile 2
3:Zeile 3
4:Zeile 4
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 82218
Url: https://administrator.de/contentid/82218
Ausgedruckt am: 23.11.2024 um 03:11 Uhr
7 Kommentare
Neuester Kommentar
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.
Kannst beruhigt schlafen heute...
...und M$ auch... keine Unterschlagung...
Grüße
Biber
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.
(=21:09:16 D:\temp=)
REM ### findstr /n $ e:\log.txt ## reicht auch...
>findstr /n "$" e:\log.txt
1:Zeile 1
2:Zeile 2
3:Zeile 3
4:Zeile 4
(=21:09:27 D:\temp=)
REM ### findstr /n ^^ e:\log.txt ## ginge syntaktisch auch, sieht aber nicht aus...
>findstr /n "^" e:\log.txt
1:Zeile 1
2:Zeile 2
3:Zeile 3
4:Zeile 4
5:Zeile 5
(=21:09:30 D:\temp=)
Kannst beruhigt schlafen heute...
...und M$ auch... keine Unterschlagung...
Grüße
Biber
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...
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:ab
a
a
ab
abc
E:\>findstr /n .* inmyfile.txt
1:abc
2:ab
3:a
4:
5:a
6:ab
7:abc
E:\>findstr /n ^^ inmyfile.txt
1:abc
2:ab
3:a
4:
5:a
6:ab
7:abc
E:\>findstr /n . inmyfile.txt
1:abc
2:ab
3:a
5:a
6:ab
7:abc
Das ".*" bewirkt aber das gleiche wie ein "^^"
miniversum
@miniversum
Stimmt, hast recht.
Logisch herleiten kann ich dieses Verhalten nicht wirklich.
Aber ich nehms hin...
Grüße
Biber
Stimmt, hast recht.
Logisch herleiten kann ich dieses Verhalten nicht wirklich.
Aber ich nehms hin...
Grüße
Biber
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)
"." 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)
@miniversum
Jepp, jetzt habe ich es auch verstanden.
".*" == "Ein beliebiges Zeichen keinmal, einmal oder öfter".
"." == "Ein beliebiges Zeichen, aber mindestens eines"
Danke
Biber
Jepp, jetzt habe ich es auch verstanden.
".*" == "Ein beliebiges Zeichen keinmal, einmal oder öfter".
"." == "Ein beliebiges Zeichen, aber mindestens eines"
Danke
Biber