aus Textdatei zwischen 2 Schlüsselwörtern etwas nach Variable auslesen
Hallo!
Ich benutze Qstat (www.qstat.org) um einen Gameserver zu überwachen, die Commandline sieht so aus:
Und die Ausgabe so:
Nun möchte ich nach Lust und Laune den Server abfragen und sobald eine Map läuft die mir gefällt, ein Bild anzeigen lassen. Die nötigen Bilder existieren bereits ("nein.jpg" ist ein schwarzer Kasten, die anderen sind einfache Screenshots mit dem Namen der jeweiligen Map; zB de_chateau.jpg).
Mein bisheriges Machwerk sieht so aus:
Der Wert den ich auslesen möchte steht zwischen "map" und "at" und daran scheitere ich kläglich. Die Lösungen die ich bisher gefunden hab, lesen nur ab einem Stichwort bis Zeilenende. Außerdem kann es auch sein, das der Mapname Leerzeichen enthält (Qstat unterstützt viele Games bzw Gameserver).
Ist das auslesen überhaupt per Batch machbar?
[edit]
Falls von Belang: WinXP SP2
Ich benutze Qstat (www.qstat.org) um einen Gameserver zu überwachen, die Commandline sieht so aus:
qstat -old -hla2s 195.4.17.1>a.a
Und die Ausgabe so:
195.4.17.1 "#Counterstrike.de [1.6] #01 [hlstats]" map de_chateau at (null) 0/20 players 16 ms
Nun möchte ich nach Lust und Laune den Server abfragen und sobald eine Map läuft die mir gefällt, ein Bild anzeigen lassen. Die nötigen Bilder existieren bereits ("nein.jpg" ist ein schwarzer Kasten, die anderen sind einfache Screenshots mit dem Namen der jeweiligen Map; zB de_chateau.jpg).
Mein bisheriges Machwerk sieht so aus:
@echo off
qstat -old -hla2s 195.4.17.1>a.a
for /f "delims== tokens=1,2" %%i in ('findstr "map" a.a') do @set map=%%i
echo die map ist %map%
if exist c:\srvchk\%map%.jpg goto ja
c:\programme\irfanview\i_view32.exe c:\srvchk\nein.jpg
goto fertig
:ja
c:\programme\irfanview\i_view32.exe c:\srvchk\%map%.jpg
:fertig
exit
Der Wert den ich auslesen möchte steht zwischen "map" und "at" und daran scheitere ich kläglich. Die Lösungen die ich bisher gefunden hab, lesen nur ab einem Stichwort bis Zeilenende. Außerdem kann es auch sein, das der Mapname Leerzeichen enthält (Qstat unterstützt viele Games bzw Gameserver).
Ist das auslesen überhaupt per Batch machbar?
[edit]
Falls von Belang: WinXP SP2
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 72537
Url: https://administrator.de/forum/aus-textdatei-zwischen-2-schluesselwoertern-etwas-nach-variable-auslesen-72537.html
Ausgedruckt am: 22.05.2025 um 03:05 Uhr
5 Kommentare
Neuester Kommentar
Hallo uteliggare und willkommen im Forum!
Grüße
bastla
Ist das auslesen überhaupt per Batch machbar?
Je nachdem, welche weiteren Anhaltspunkte es gäbe (zB Map-Bezeichnung beginnt an bestimmter Position, etc) könnte man's auch mit purem Batch versuchen - einfacher wird's mit einem Quäntchen (temporärem) VBScript - etwa so:@echo off & setlocal
set "Stat=c:\srvchk\a.a"
set "GM=%temp%\GetMap.vbs"
echo On Error Resume Next:T=CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0),1).ReadAll>"%GM%"
echo P=Instr(T," map "):If P Then P2=InStr(P,T," at "): WScript.Echo P2:If P2 Then WScript.Echo Mid(T,P+5,P2-P-5)>>"%GM%"
qstat -old -hla2s 195.4.17.1 >"%Stat%"
for /f "delims=" %%i in ('cscript //nologo "%GM%" "%Stat%"') do set "map=%%i"
del "%GM%"
if not defined map set "map=nein"
if not exist c:\srvchk\%map%.jpg set "map=nein"
c:\programme\irfanview\i_view32.exe "c:\srvchk\%map%.jpg"
Grüße
bastla
Moin uteliggare,
dann mal parallel zu bastlas Strategie eine native Batch-Variante.
Ich habe auch ein paar Zeilen daraus gemacht, damit es übersichtlich bleibt.
Hier verwende ich zwar kein "Abzählen", sondern nehme (so wie es ja eigentlich auch logisch sein sollte) die Strings " map " und " at " als Begrenzer, als auf Neudeutsch "Delimiter".
Okay, ich mach da Ein-Zeichen-Delimiter draus ("§"-Zeichen).
Output bei dieser Skizze ist dann z.B.
P.S. Wenn es immer nur eine einzige Zeile bzw. Map sein kann, dann reicht natürlich:
oder weniger...
Grüße
Biber
dann mal parallel zu bastlas Strategie eine native Batch-Variante.
Ich habe auch ein paar Zeilen daraus gemacht, damit es übersichtlich bleibt.
::-------snipp ExtractMap.bat
@echo off & setlocal
for /f "delims=" %%i in ('findstr "map at " a.a') do call :findMap %%i
goto :eof
:findmap
set ln=%*
Set ln=%ln: map =§%
Set ln=%ln: at =§%
For /f "delims=§ tokens=2" %%a in ("%ln%") do echo Map ist [%%a]
goto :eof
Hier verwende ich zwar kein "Abzählen", sondern nehme (so wie es ja eigentlich auch logisch sein sollte) die Strings " map " und " at " als Begrenzer, als auf Neudeutsch "Delimiter".
Okay, ich mach da Ein-Zeichen-Delimiter draus ("§"-Zeichen).
Output bei dieser Skizze ist dann z.B.
Map ist [de_chateau]
Map ist ["Berlin Alexanderplatz"]
P.S. Wenn es immer nur eine einzige Zeile bzw. Map sein kann, dann reicht natürlich:
::-------snipp ExtractOneMap.bat
@echo off & setlocal
for /f "delims=" %%i in ('findstr "map at " a.a') do Set ln=%%i
Set ln=%ln: map =§%
Set ln=%ln: at =§%
For /f "delims=§ tokens=2" %%a in ("%ln%") do echo Map ist [%%a]
Grüße
Biber
Moin uteliggare,
ausnahmsweise, obwohl Du noch ein paar Rückfragen an bastla gerichtet hast, werde ich jetzt diesen Thread schließen.
Und dich mit Deinem Fragen zu Batch und FOR-Anweisungen und Delimiters etc dahin verweisen, wo wir auch die anderen Batch-Newbies hingeschickt haben, wenn sie erstmal auf den Geschmack gekommen waren:
Ich hoffe auf Dein Verständnis
Schönes Wochenende
Biber
ausnahmsweise, obwohl Du noch ein paar Rückfragen an bastla gerichtet hast, werde ich jetzt diesen Thread schließen.
Und dich mit Deinem Fragen zu Batch und FOR-Anweisungen und Delimiters etc dahin verweisen, wo wir auch die anderen Batch-Newbies hingeschickt haben, wenn sie erstmal auf den Geschmack gekommen waren:
- erste und auch keine schlechte Quelle: die Einzel-Befehls-Hilfe am CMD-Prompt. ("FOR /?", "IF /?"...). Ist ein ernstgemeinter Tipp.
- danach, mit ein wenig Grundlagen, wenn man/frau zwei oder drei Batchzeilen fließend lesen kann, dann hier im Forum im Bereich Batch & Shell ein bisschen stöbern. (BTW, oft sind die Bätche hier auch nach zwei, drei Zeilen schon zu Ende...)
- eventuell zur Orientierung noch die paar handverlesenen Links im Bereich Batch & Shell antesten.
- Und am wichtigsten: Nie, nie, nie einen "Profi-Bätche für jede Gelegenheit"-Kurs in einer Tankstellen-PC-Zeitschrift in die Hand nehmen.
Ich hoffe auf Dein Verständnis
Schönes Wochenende
Biber