Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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

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, 6198 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst Mal eine neue Art von Abfrage mit findstr (8)

Frage von DaTobsn zum Thema Batch & Shell ...

Batch & Shell
Bei copy aus FOR Schleife wird letzte Zeile abgeschnitten

Frage von miczar zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(1)

Information von DerWoWusste zum Thema Microsoft ...

Humor (lol)

Wohnt jemand in Belgien und kann nicht mehr ruhig ausschlafen?

(6)

Information von LordGurke zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (19)

Frage von Dobby zum Thema Router & Routing ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

TK-Netze & Geräte
TK-Anlage VoIP - DECT Erweiterung (15)

Frage von Lynkon zum Thema TK-Netze & Geräte ...