Top-Themen

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 aus Textdatei zwischen 2 Schlüsselwörtern etwas nach Variable auslesen

Mitglied: uteliggare

uteliggare (Level 1) - Jetzt verbinden

02.11.2007, aktualisiert 19:48 Uhr, 4250 Aufrufe, 5 Kommentare

Hallo!

Ich benutze Qstat (www.qstat.org) um einen Gameserver zu überwachen, die Commandline sieht so aus:
01.
qstat -old -hla2s 195.4.17.1>a.a
Und die Ausgabe so:
01.
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:
01.
@echo off 
02.
qstat -old -hla2s 195.4.17.1>a.a 
03.
 
04.
for /f "delims== tokens=1,2" %%i in ('findstr "map" a.a') do @set map=%%i 
05.
echo die map ist %map% 
06.
 
07.
if exist c:\srvchk\%map%.jpg goto ja 
08.
c:\programme\irfanview\i_view32.exe c:\srvchk\nein.jpg 
09.
goto fertig 
10.
:ja 
11.
c:\programme\irfanview\i_view32.exe c:\srvchk\%map%.jpg 
12.
:fertig 
13.
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
Mitglied: bastla
02.11.2007 um 09:15 Uhr
Hallo uteliggare und willkommen im Forum!

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:
01.
@echo off & setlocal 
02.
set "Stat=c:\srvchk\a.a" 
03.
 
04.
set "GM=%temp%\GetMap.vbs" 
05.
echo On Error Resume Next:T=CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0),1).ReadAll>"%GM%" 
06.
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%" 
07.
 
08.
qstat -old -hla2s 195.4.17.1 >"%Stat%" 
09.
for /f "delims=" %%i in ('cscript //nologo "%GM%" "%Stat%"') do set "map=%%i" 
10.
del "%GM%" 
11.
 
12.
if not defined map set "map=nein" 
13.
if not exist c:\srvchk\%map%.jpg set "map=nein" 
14.
c:\programme\irfanview\i_view32.exe "c:\srvchk\%map%.jpg"
Grüße
bastla
Bitte warten ..
Mitglied: uteliggare
02.11.2007 um 11:06 Uhr
Hallo bastla,

vielen Dank für die schnelle Hilfe! Auf dem Rechner meiner Frau funktioniert das Script bestens, aber auf meinem ist der Scriptinghost disabled.
(Für die stillen Mitleser, so gehts: http://www.network-secure.de/content/view/3749/731/ )


Eigentlich bräuchte ich "nur" eine Lösung die in Variablen etwas abzählt, denn ich kann mir vorstellen das Grundprinzip, das man sich mitten aus einer Zeichenkette etwas herausschnippelt, später anderweitig zu verwenden.

Skizze:
01.
@echo off 
02.
set map="195.4.17.1       "#Counterstrike.de [1.6] #01 [hlstats]" map de_chateau at                 (null) 0/20 players 16 ms" 
03.
 
04.
for ???1 " map " in %map% set position1=*57* (wenn die gesuchte Zeichenkette ab Position 57 wäre) 
05.
for ???2 " at " in %map% set position2=*10* (wenn die gesuchte Zeichenkette 10 Zeichen lang wäre) 
06.
set %map2:~position1,position2% 
07.
 
08.
echo Ergebniss: %map2%
Außerdem ist mir noch etwas schleierhaft... warum steht bei dir die Variable in Zeile 2 komplett in "" und was bedeutet %%i?
%i steht ja bei "for /?" erklärt, aber zum doppelten Prozentzeichen finde ich nichts.
Ich würde gern verstehen was da passiert.

mfg, uti

PS.: bei deiner jetzigen Lösung finde ich die letzten drei Zeilen echt klever, dass erspart viel Goto-Gehopse!
Bitte warten ..
Mitglied: Biber
02.11.2007 um 12:20 Uhr
Moin uteliggare,

dann mal parallel zu bastlas Strategie eine native Batch-Variante.

Ich habe auch ein paar Zeilen daraus gemacht, damit es übersichtlich bleibt.
01.
::-------snipp ExtractMap.bat 
02.
@echo off & setlocal 
03.
for /f "delims="  %%i in ('findstr "map at " a.a') do call :findMap %%i 
04.
goto :eof 
05.
 
06.
:findmap 
07.
set ln=%* 
08.
Set ln=%ln: map =§% 
09.
Set ln=%ln: at =§% 
10.
For /f "delims=§ tokens=2" %%a in ("%ln%") do echo Map ist [%%a] 
11.
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.
01.
Map ist [de_chateau] 
02.
Map ist ["Berlin Alexanderplatz"]
P.S. Wenn es immer nur eine einzige Zeile bzw. Map sein kann, dann reicht natürlich:
01.
::-------snipp ExtractOneMap.bat 
02.
@echo off & setlocal 
03.
for /f "delims="  %%i in ('findstr "map at " a.a') do Set ln=%%i 
04.
Set ln=%ln: map =§% 
05.
Set ln=%ln: at =§% 
06.
For /f "delims=§ tokens=2" %%a in ("%ln%") do echo Map ist [%%a]
.... oder weniger...

Grüße
Biber
Bitte warten ..
Mitglied: uteliggare
02.11.2007 um 12:58 Uhr
Es funktioniert, es funktioniert! Danke Biber!

Das delims Delimiter bedeutet, wußte ich nicht, aber im Nachhinein ist's eigentlich logisch. "call :jumpmarke" und "goto :eof" sind ebenfalls interessant!
Und so langsam begreife ich auch die Funktionsweise der For-Schleife.

danke nochmals und mfg,
uti
Bitte warten ..
Mitglied: Biber
02.11.2007 um 19:48 Uhr
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:

  • 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
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Variable in TextDatei auslesen
gelöst Frage von arvaxtrBatch & Shell5 Kommentare

Hallo Leute, ich habe eine TextDatei, in der eine Benutzervariable steht: %MyVar% ist als Benutzervariable in den Umgebungsvariablen definiert. ...

Batch & Shell

In mehrzeiliger Textdatei verschiedene Zeilen auslesen und in Variablen aufsplitten

gelöst Frage von Boory01Batch & Shell6 Kommentare

Hallo Forum, ich möchte per Batch Datenreihen aus einer Textdatei verwerten. Hintergrund: Es sollen IP-Einträge gesetzt werden, die für ...

Batch & Shell

Textdatei zeilenweise in Variable schreiben

gelöst Frage von goodbytesBatch & Shell20 Kommentare

Hallo, mit einer Batch möchte ich mehrere Laufwerke mappen, abhängig vom Usernamen. Klar könnte ich auch für jeden User ...

Batch & Shell

Datei als Variable auslesen und Variable ändern

gelöst Frage von chainsawBatch & Shell1 Kommentar

Hallo Profis, ich komme mit folgendem Problem nicht weiter: In dem Verzeichnis "C:\logfiles" landen bei mir Log-Dateien. Diese Log-Dateien ...

Neue Wissensbeiträge
Windows 7

Windows 7 - Server 2008 R2: Exploit für Total Meltdown verfügbar

Information von kgborn vor 5 StundenWindows 7

Kleine Information für Administratoren, die für die Updates von Windows 7 SP1 und Windows Server 2008 R2 SP1 verantwortlich ...

Sicherheit

Zero Day-Schwachstelle im Internet Explorer - wird von APT bereits ausgenutzt

Information von kgborn vor 16 StundenSicherheit

Im Kernel des Internet Explorer scheint es eine Zero Day-Lücke zu geben, die von staatlichen Akteuren (APT) im Rahmen ...

Microsoft
Folder Security Viewer-Lizenzen zu gewinnen
Information von kgborn vor 16 StundenMicrosoft

Ich nehme das Thema mal in Absprache mit Frank hier auf, da es für den einen oder anderen Administrator ...

Hardware

Feueralarm killt Festplatten in Rechenzentrum - führt zu größerem Ausfall

Information von kgborn vor 16 StundenHardware11 Kommentare

Noch ein kleiner Beitrag für Administratoren, die in Rechenzentren aktiv sind - so als Fingerzeig. Denn es gibt Szenarien, ...

Heiß diskutierte Inhalte
Linux
Linux Server oder Windows Server - lohnt eine Umstellung auf Linux und ebenso basierende SW bei einer langfristigen Planung?
Frage von motus5Linux23 Kommentare

Wir brauchen bei uns einen neuen Server. Dieser wird als Fileserver, Domäne Controller sowie Exchange Server verwendet. Wir versuchen ...

DSL, VDSL
ISP Wechsel auf Vodefone Koax, Gebäudeverkabelung nur per Cat 7
gelöst Frage von wusa88DSL, VDSL18 Kommentare

Hallo Zusammen, ich bin momentan bei Mnet als Glasfaser Kunde und möchte Preis/Leistungs-Technisch zu Kabel Deutschland / Vodafone wechseln. ...

LAN, WAN, Wireless
Kommunikation zwischen verschiedenen IP-Bereichen
Frage von DirkHoLAN, WAN, Wireless13 Kommentare

Hallo zusammen, von Unitymedia habe ich ein neues Modem (Connect Box) erhalten, das u.a. IPv4 aber keinen Bridge Mode ...

Windows Server
Domänencontroller trennen
Frage von Akit57Windows Server13 Kommentare

Hallo, ich hoffe das mir hier jemand meine Frage trotz der spärlichen Informationen die ich geben kann beantworten kann: ...