nighty2kk
Goto Top

Erstes wort aus der letzten zeile in variable

Hallo

ich wollte gerne mal nachfragen wie ich per batch das erste wort aus der letzten zeile einer txt datei in eine variable speichere.
habe ein script wo nur die letzte zeile ausgelesen wird. evtl kann mir das jemand umschreiben das nur das erste wort der letzten zeile ausgelesen wird.
danke


@echo off & setlocal

set "LetzteZeile="

for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "D:\Deine Datei.txt"') do set "LetzteZeile=%%j"

echo\%LetzteZeile%

Content-Key: 204629

Url: https://administrator.de/contentid/204629

Printed on: April 19, 2024 at 06:04 o'clock

Member: bastla
bastla Apr 08, 2013 updated at 14:16:16 (UTC)
Goto Top
Hallo nighty2kk und willkommen im Forum!

Wenn Du als erstes "Wort" alles bis zum ersten Leerzeichen (außer, die Zeile beginnt mit einem oder mehreren Leerzeichen, dann den Teil ab dem ersten Nicht-Leerzeichen bis zum nächsten Leerzeichen) meinst, dann etwa so:
@echo off & setlocal
for /f "usebackq" %%i in ("D:\Deine Datei.txt") do set "Wort=%%i"  
echo %Wort%
Genau genommen bekommst Du so das erste Wort der letzten nicht leeren (oder nur aus Leerzeichen bestehenden) Zeile.

Grüße
bastla
Member: nighty2kk
nighty2kk Apr 09, 2013 updated at 07:38:52 (UTC)
Goto Top
danke, mein code funktioniert soweit, jedoch hätte ich eine frage dazu.

@echo off & setlocal
for /f "usebackq" %%i in ("D:\Deine Datei.txt") do set "Wort=%%i"
find "suchwort" %Wort%.txt && goto START
goto :EOF
:START
echo test bestanden
pause

es wird in einer anderen txt datei(welche den namen der variable Wort trägt) nach "suchwort" gesucht und wenn vorhanden "test bestanden" ausgegeben.
wie mach ich es am besten das er mir "test NICHT bestanden" ausgibt wenn er nicht das "suchwort" findet?.
müsste ja mit einer IF anweisung gehen, jedoch bekomme ich das nicht so hin da "suchwort" keine variable ist.
Member: bastla
bastla Apr 09, 2013 at 13:00:01 (UTC)
Goto Top
Hallo nighty2kk!

Einfach so:
find "suchwort" %Wort%.txt && (  
    echo test bestanden
) || (
    echo test nicht bestanden
)
pause
goto :eof
Grüße
bastla

P.S.: Mit der Formatierung als "Code" (lässt sich auch nachträglich einfügen) sieht das doch viel besser aus, findest Du nicht?
Member: nighty2kk
nighty2kk Apr 15, 2013 at 08:00:20 (UTC)
Goto Top
danke, hat geklappt
Member: nighty2kk
nighty2kk Apr 16, 2013 at 12:34:50 (UTC)
Goto Top
nochmal eine kurze frage:

ist es möglich auch einen anderen abschnitt aus einer anderen zeile in eine variable zu definieren.
damit man sich es besser vorstellt.

abcd and 2013-03-10 01.00.00
avax and 2013-03-17 01.00.00
asdf and 2013-03-24 01.00.00
gsdg and 2013-03-31 01.00.00

quasi das datum aus der vorletzten zeile bräuchte ich.
Member: bastla
bastla Apr 16, 2013 at 13:12:20 (UTC)
Goto Top
Hallo nighty2kk!

Woran ist die vorletzte Zeile zu erkennen (außer, dass sie tatsächlich die vorletzte Zeile - mit Inhalt - wäre)?

Wenn "vorletzte Zeile": Ließe sich dann dieses Datum auch als "zweitjüngstes" definieren (weil die Zeilen nach Datum sortiert vorliegen)?


Grüße
bastla
Member: nighty2kk
nighty2kk Apr 16, 2013 updated at 13:22:40 (UTC)
Goto Top
Das ist gerade das Doofe. Sie ist an nichts zu erkennen. Ich wollte zuerst die Zeilen durchzählen, aber die Textdatei ändert sich und es kommen immer neue zeilen dazu pro Woche.
Meine Idee war es einfach vom aktuellen Datum 7 abzuziehen. Funktioniert natürlich, jedoch kann es passieren das vor 7 Tagen kein neuer Eintrag dazu gekommen ist. Deswegen muss ich die vorletzte Zeile nehmen, sprich den Abschnitt mit dem Datum.
Hoffe das ist irgendwie möglich.
Member: bastla
bastla Apr 16, 2013 at 13:39:04 (UTC)
Goto Top
... womit aber noch immer die Frage bliebe, ob der gesuchte Datumswert der zweitjüngste ist ...

Grüße
bastla
Member: nighty2kk
nighty2kk Apr 16, 2013 at 13:41:24 (UTC)
Goto Top
ja es ist immer das zweitjüngste
Member: nighty2kk
nighty2kk Apr 16, 2013 updated at 20:21:43 (UTC)
Goto Top
Hat keiner mehr eine Idee?
Mir würde noch einfallen das irgendwie man Zeile für Zeile mit einer For Schleife das Datum überprüft.
Sprich Zeile 1 das richtige Datum Ja oder Nein? Wenn nicht weiter. Also immer in 7er Schritten das Datum Zeile für Zeile zu überprüfen.
Könnte das hinhauen, was meint ihr?
Member: bastla
bastla Apr 16, 2013 at 20:44:16 (UTC)
Goto Top
Hallo nighty2kk!

Soferne die Stellenanzahl vor den Datumswerten (in Deinem Beispiel 9 Zeichen) konstant wäre, könnte das zB so gehen:
@echo off & setlocal
set "Datei=D:\Deine Datei.txt"  

set "Datum="  
for /f "skip=1 tokens=3" %%i in ('sort /r /+9 "%Datei%"') do if not defined Datum set "Datum=%%i"  
Grüße
bastla
Member: rubberman
rubberman Apr 16, 2013 at 20:54:05 (UTC)
Goto Top
Hallo Zusammen,

vielleicht auch so:
@echo off &setlocal
set "file=D:\Deine Datei.txt"  

setlocal EnableDelayedExpansion
for /f %%i in ('type "!file!"^|find /c /v ""') do set /a "stop = %%i - 2"  
<"!file!" (  
  for /l %%i in (1 1 %stop%) do set /p "="  
  set /p "vorletzte="  
  set /p "letzte="  
)
endlocal &set "vorletzte=%vorletzte%" &set "letzte=%letzte%"  

echo Vorletzte Zeile: %vorletzte%
echo Letzte Zeile: %letzte%

for /f %%i in ("%vorletzte:* and =%") do echo Datum %%i  
for /f %%i in ("%letzte%") do echo Wort %%i  
pause

Beruht auf der Annahme, dass das "and" das erste mal vor dem Datum auftaucht.

Grüße
rubberman
Member: nighty2kk
nighty2kk Apr 16, 2013 at 21:12:59 (UTC)
Goto Top
ja das "and" steht immer vor dem Datum, ich werde es morgen Früh dann auf Arbeit ausprobieren.
Danke schonmal, ich geb dann Bescheid wenn es geklappt hat.
Member: nighty2kk
nighty2kk Apr 17, 2013 updated at 07:35:37 (UTC)
Goto Top
Der Code von bastla hat wunderbar funktioniert, vielleicht könntest du mir die 5te zeile deines codes ein wenig erklären, damit ich es besser verstehe.
danke
Member: bastla
bastla Apr 17, 2013, updated at May 03, 2013 at 17:10:32 (UTC)
Goto Top
Hallo nighty2kk!
vielleicht könntest du mir die 5te zeile deines codes ein wenig erklären
Du kannst ja testweise einmal direkt
sort /r /+9 "D:\Deine Datei.txt"
ausführen und siehst dann, dass damit eine nach dem Datum (ab der 9. Stelle der Zeile) absteigend (wegen "/r") sortierte Liste aus der Datei erzeugt wird.

Da der zweitjüngste Wert gesucht ist, wird in der Schleife per "skip=1" die erste Zeile der durch "sort" erzeugten Ausgabe übersprungen. Mit "tokens=3" wird festgelegt, dass der 3. Teil der Zeile (Trennung anhand der Standard-Trennzeichen "Leerzeichen" und "TAB") in die Variable "%%i" übernommen werden soll.

Damit die Zuweisung zur Variablen "%Datum%" nicht bei jedem Schleifendurchlauf erneut erfolgt, wird in Zeile 4 "%Datum%" gelöscht und in der Schleife nur zugewiesen, wenn die Variable noch nicht existiert - das ist aber natürlich nur beim ersten Schleifendurchlauf der Fall, und daher wird der Wert in weiteren Durchläufen nicht mehr überschrieben.

Grüße
bastla