Die letzten 20 Zeichen einer Textdatei
Hallo,
ich suche eine möglichkeit die letzten 20 Zeichen einer Textdatei in einer Variable zu schreiben.
Alternativ kann ich den Teil davor auch löschen.
Aber wie ????
Gruß
Marian
ich suche eine möglichkeit die letzten 20 Zeichen einer Textdatei in einer Variable zu schreiben.
Alternativ kann ich den Teil davor auch löschen.
Aber wie ????
Gruß
Marian
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 14976
Url: https://administrator.de/contentid/14976
Ausgedruckt am: 26.11.2024 um 08:11 Uhr
6 Kommentare
Neuester Kommentar
Moin, Marian,
Sind die 20 Zeichen denn wenigstens in einer Zeile?
Oder besteht die *.txt-Datei nur aus einer (Text-)Zeile?
Angenommen, der Text bestünde aus den drei Zeilen oben (=marian.txt), dann würde der 2-Zeiler:
zwar das gewünschte liefern:
... , aber eben auch ggf. mit führenden Leerzeichen.
Und wenn die letzte Zeile aus weniger als 20 Zeichen besteht, wird auch der Variablenwert kürzer.
Kannst Du Dein Beispiel / Deine .txt-Datei etwas erläutern bitte?
HTH
Frank / der Biber aus Bremen
Sind die 20 Zeichen denn wenigstens in einer Zeile?
Oder besteht die *.txt-Datei nur aus einer (Text-)Zeile?
Angenommen, der Text bestünde aus den drei Zeilen oben (=marian.txt), dann würde der 2-Zeiler:
--- snipp getlast20.bat
@for /f "delims=" %%i in (marian.txt) do set last20=%%i
@set last20=%last20:~-20%
<=16:38:06 D:\temp=>
>set last20
last20= einer (Text-)Zeile?
Und wenn die letzte Zeile aus weniger als 20 Zeichen besteht, wird auch der Variablenwert kürzer.
Kannst Du Dein Beispiel / Deine .txt-Datei etwas erläutern bitte?
HTH
Frank / der Biber aus Bremen
@Marian
Umständlich.. warum gehst Du nicht gleich über den output von GetSID?
Als LogFile gibt dein Dingens.txt doch eh nichts her ohne Datum und Uhrzeit.
Warum nicht einfach als Oneliner?
Ergebnis:
SID=S-1-5-21-767070826-569389849-654838779-1005
Wenn Du schon über so einen Klotz wie M$'s getSid.exe gehen willst. Gibt auch schlankere.
Nice Weekend
Frank / der Biber aus Bremen
Umständlich.. warum gehst Du nicht gleich über den output von GetSID?
Als LogFile gibt dein Dingens.txt doch eh nichts her ohne Datum und Uhrzeit.
Warum nicht einfach als Oneliner?
---- SetSid.bat ( S = Server U = User)
@for /f "skip=2 tokens=7" %%i in ('getsid \\%S% %U% \\%S% %U%') do @set Sid= %%i
SID=S-1-5-21-767070826-569389849-654838779-1005
Wenn Du schon über so einen Klotz wie M$'s getSid.exe gehen willst. Gibt auch schlankere.
Nice Weekend
Frank / der Biber aus Bremen
Hast recht, Marian,
ist ein Tippfehler drin: oben in dem Einzeiler habe ich aus Versehen ein Leerzeichen zuviel.
Bei dem "@set Sid= %%i" eingetippt (richtig wäre:"@set Sid=%%i").
oder, im ganzen Satz:
SetSid.bat ( S = Server U = User)
@for /f "skip=2 tokens=7" %%i in ('getsid \\%S% %U% \\%S% %U%') do @set Sid=%%i
Was der Einzeiler macht, kann ich beschreiben.
FOR /F ..IN.. ('getsid... ' ) DO irgendwas...
heißt frei übersetzt: Für jede Zeile des Outputs von (getsid....) mache irgendwas.
Du hast den Output ja in eine Datei geschrieben:
ich stell mal vor die Ausgabe von getsid / vor den Output Zeilennummern
1 The SID for account K01821\anmelde matches account K01821\anmelde
2 The SID for account K01821\anmelde is S-1-5-21-1767070826-569389849-654838779-1005
3 The SID for account K01821\anmelde is S-1-5-21-1767070826-569389849-654838779-1005
ich sage: @for /f "skip=2" ..... überspringe 2 Zeilen. Übrig bleibt Zeile 3:
3 The SID for account K01821\anmelde is S-1-5-21-1767070826-569389849-654838779-1005
ich sage: @for /f "tokens=7" .... nimm (nur) Token Nr. 7, also das 7.te Element der Zeile
Tokens werden durch Leerzeichen getrennt (Default), also:
The SID for account K01821\anmelde is S-1-5-21-1767070826-569389849-654838779-1005
"The" = Token1; "SID" = Token2; "for" = Token3;......"is" = Token6;
S-1-5-21-1767070826-569389849-654838779-1005 = Token7
bzw. (neuer Versuch in halbwegs akzeptablen Deutsch): ich habe dem For-Befehl erzählt,
Nimm Dir die Ausgabe vom getSID-Befehl, fang aber erst mit der dritten Zeile an, nimm von Zeile 3 (und ggf. folgende) nur das siebente Token und übergib das an den DO-irgendwas-Teil der Verarbeitung. Dann brauch ich Dich nicht mehr.
Und die Verarbeitung besteht nur noch auch einem "Set SID=(7tes Token von Zeile 3)"
Thats all.
Kann leider nicht so gut erklären, aber ich habs wenigstens versucht.
Frank / der Biber aus Bremen
P.S. Der Name "SetSID.bat" ist natürlich unglücklich / irreführend. Ich setze ja nicht die Security-ID (neu), sondern ermittle sie ja nur...ist also eigentlich ein "GetSID". Aber so heißt ja der M$-Schinken schon. Wem also ein besserer Name für den Einzeiler einfällt, soll diesen nehmen (und mir bitte einen Tipp geben).
ist ein Tippfehler drin: oben in dem Einzeiler habe ich aus Versehen ein Leerzeichen zuviel.
Bei dem "@set Sid= %%i" eingetippt (richtig wäre:"@set Sid=%%i").
oder, im ganzen Satz:
SetSid.bat ( S = Server U = User)
@for /f "skip=2 tokens=7" %%i in ('getsid \\%S% %U% \\%S% %U%') do @set Sid=%%i
Was der Einzeiler macht, kann ich beschreiben.
FOR /F ..IN.. ('getsid... ' ) DO irgendwas...
heißt frei übersetzt: Für jede Zeile des Outputs von (getsid....) mache irgendwas.
Du hast den Output ja in eine Datei geschrieben:
Hier ist der Org. Text meiner Datei.
The SID for account K01821\anmelde matches account K01821\anmelde
The SID for account K01821\anmelde is S-1-5-21-1767070826-569389849-654838779-1005
The SID for account K01821\anmelde is S-1-5-21-1767070826-569389849-654838779-1005
The SID for account K01821\anmelde is S-1-5-21-1767070826-569389849-654838779-1005
The SID for account K01821\anmelde is S-1-5-21-1767070826-569389849-654838779-1005
ich stell mal vor die Ausgabe von getsid / vor den Output Zeilennummern
1 The SID for account K01821\anmelde matches account K01821\anmelde
2 The SID for account K01821\anmelde is S-1-5-21-1767070826-569389849-654838779-1005
3 The SID for account K01821\anmelde is S-1-5-21-1767070826-569389849-654838779-1005
ich sage: @for /f "skip=2" ..... überspringe 2 Zeilen. Übrig bleibt Zeile 3:
3 The SID for account K01821\anmelde is S-1-5-21-1767070826-569389849-654838779-1005
ich sage: @for /f "tokens=7" .... nimm (nur) Token Nr. 7, also das 7.te Element der Zeile
Tokens werden durch Leerzeichen getrennt (Default), also:
The SID for account K01821\anmelde is S-1-5-21-1767070826-569389849-654838779-1005
"The" = Token1; "SID" = Token2; "for" = Token3;......"is" = Token6;
S-1-5-21-1767070826-569389849-654838779-1005 = Token7
bzw. (neuer Versuch in halbwegs akzeptablen Deutsch): ich habe dem For-Befehl erzählt,
Nimm Dir die Ausgabe vom getSID-Befehl, fang aber erst mit der dritten Zeile an, nimm von Zeile 3 (und ggf. folgende) nur das siebente Token und übergib das an den DO-irgendwas-Teil der Verarbeitung. Dann brauch ich Dich nicht mehr.
Und die Verarbeitung besteht nur noch auch einem "Set SID=(7tes Token von Zeile 3)"
Thats all.
Kann leider nicht so gut erklären, aber ich habs wenigstens versucht.
Frank / der Biber aus Bremen
P.S. Der Name "SetSID.bat" ist natürlich unglücklich / irreführend. Ich setze ja nicht die Security-ID (neu), sondern ermittle sie ja nur...ist also eigentlich ein "GetSID". Aber so heißt ja der M$-Schinken schon. Wem also ein besserer Name für den Einzeiler einfällt, soll diesen nehmen (und mir bitte einen Tipp geben).