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

Frage Entwicklung Batch & Shell

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, 4242 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
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...