Wie finde ich folgende Werte?
Ich suche eine Möglichkeit in einer erstellten Text Datei Zwei Werte auszulesen. Der eine Wert kann ich über Find finden, jedoch ist der zweite Wert eine Variable innerhalber der Text Datei!
Guten Abend zusammen,
ich muss gestehen ich bin ein relativer Neuling was die Batch Programmierung anbelangt.
Und ich besitze keinerlei Programmierkenntnisse, alles das was ich kann habe ich mir erlesen und ausprobiert. Doch nun komme ich an einen Punkt, da weiß ich nicht weiter.
Ich habe eine Text Datei, in der viele verschiedene Werte stehen, für mich sich aber nur 5 Werte Relevant, wobei zwei als UND Verknüpft werden sollen!
Beispiel:
Die Text Datei enthält folgende Daten:
usw.
für mich sind nun folgende Werte Wichtig! Einmal die PID die ich mit FIND abfrage! Und die Anzahl der Players, die sich jedoch immer wieder ändert!
Und ich möchte nun folgendes.
Wenn die Pid UND die Anzahl der Players über 20 ist goto Wait
Für den Suche nach der Pid gehe ich wie folgt vor:
Erstmal vielen Dank für die Hilfe und für die Nachsicht.........doch jeder fängt mal klein an!
Guten Abend zusammen,
ich muss gestehen ich bin ein relativer Neuling was die Batch Programmierung anbelangt.
Und ich besitze keinerlei Programmierkenntnisse, alles das was ich kann habe ich mir erlesen und ausprobiert. Doch nun komme ich an einen Punkt, da weiß ich nicht weiter.
Ich habe eine Text Datei, in der viele verschiedene Werte stehen, für mich sich aber nur 5 Werte Relevant, wobei zwei als UND Verknüpft werden sollen!
Beispiel:
Die Text Datei enthält folgende Daten:
map*: Suez_Canal
*game (version):* stella (1.10.48.0)
*punkbuster:* no
*passworded:* no
*maxplayers:* 48
*players:* 33
*team:* 2
*deaths:* 0
*pid:* 276696252
*skill:* 0
*team:* 2
*deaths:* 0
*pid:* 276697571
*skill:* 0
usw.
für mich sind nun folgende Werte Wichtig! Einmal die PID die ich mit FIND abfrage! Und die Anzahl der Players, die sich jedoch immer wieder ändert!
Und ich möchte nun folgendes.
Wenn die Pid UND die Anzahl der Players über 20 ist goto Wait
Für den Suche nach der Pid gehe ich wie folgt vor:
find /c /i "276696252" "C:\temp\wget\check.txt"
IF ERRORLEVEL 1 goto StartAcht
IF ERRORLEVEL 0 goto CheckB
Erstmal vielen Dank für die Hilfe und für die Nachsicht.........doch jeder fängt mal klein an!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 156995
Url: https://administrator.de/contentid/156995
Ausgedruckt am: 24.11.2024 um 19:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo Driver78 und willkommen im Forum!
Du kannst die Anzahl der Player etwa so ermitteln und zwischenspeichern:
Sollte es allerdings mehrere Zeilen der Art
geben, würdest Du in der Variablen %players% den Wert aus der letzten gefundenen Zeile erhalten.
Wenn die Auswertung mit
Die Verknüpfung mit "
Grüße
bastla
Du kannst die Anzahl der Player etwa so ermitteln und zwischenspeichern:
for /f "tokens=2" %%i in ('findstr /b "*players:*" "C:\temp\wget\check.txt"') do set "players=%%i"
*players:* ##
Wenn die Auswertung mit
find /c /i "276696252" "C:\temp\wget\check.txt"
für Dich funktioniert (eigentlich wird damit die Anzahl der Zeilen mit enthaltenem (Teil)-String "276696252" ermittelt), ließe sich die Kombination etwa so erstellen:find /c /i "276696252" "C:\temp\wget\check.txt">nul && if %players% gtr 20 goto :Wait
&&
" entspricht dabei einer Abfrage des Errorlevels auf 0 ...Grüße
bastla
moin,
Demo zum spielen und lernen...
Gruß
- ich verstehe aber nicht, warum du nach "276696252" suchst, wenn du eh weißt, dass das die pid ist?
- warum suchst du nicht nach pid?
Demo zum spielen und lernen...
for /f "tokens=2 delims=*" %a in ('find "players" C:\pfad\text.txt') do echo %a
for /f "tokens=2 delims=*" %a in ('find "xplayers" C:\pfad\text.txt') do echo %a
for /f "tokens=2 delims=*" %a in ('find "*players" C:\pfad\text.txt') do echo %a
for /f "tokens=2 delims=*" %a in ('find "xplayers" C:\pfad\text.txt') do echo %a
for /f "tokens=2 delims=*" %a in ('find "*players" C:\pfad\text.txt') do echo %a
- statt do echo, kann man auch den Befehl do set nehmen
- mit set /a kann man auch gleich größer und oder kleiner auswerten
Set /?
For /?
For /?
Gruß
Hallo Driver78!
Wie soll denn die genaue Vorgangsweise sein (oben war ja nur die Rede von "Wenn die Pid UND die Anzahl der Players über 20 ist goto Wait")?
Grundsätzlich würde es ja genügen, in die nächste Zeile die alternative Vorgangsweise zu schreiben - wenn nicht gesprungen wurde, wird ja diese nächste Zeile ausgeführt ...
Ansonsten kannst Du das (ungetestet) auch etwa so aufbauen:
Besser lesbar ginge das Ganze auch so:
Grüße
bastla
Wie soll denn die genaue Vorgangsweise sein (oben war ja nur die Rede von "Wenn die Pid UND die Anzahl der Players über 20 ist goto Wait")?
Grundsätzlich würde es ja genügen, in die nächste Zeile die alternative Vorgangsweise zu schreiben - wenn nicht gesprungen wurde, wird ja diese nächste Zeile ausgeführt ...
Ansonsten kannst Du das (ungetestet) auch etwa so aufbauen:
find /c /i "276696252" "C:\temp\wget\check.txt">nul && (if %players% gtr 20 (goto :Wait) else (goto :AndererPunkt)) || (echo PID nicht gefunden! & goto :eof)
Besser lesbar ginge das Ganze auch so:
find /c /i "276696252" "C:\temp\wget\check.txt">nul && (
if %players% gtr 20 (
goto :Wait
) else (
goto :AndererPunkt
)
) || (
echo PID nicht gefunden!
goto :eof
)
bastla
Moin,
schade - dass du dir meine wenigen Zeilen nicht durchgelesen oder die markierten probiert hast....
Oder andersherum ist vor Players ein x oder vor maxplayers ein *? eben
Und wenn diese Token und Delims für deine erste Frage 2 bzw * sind - welches Trennzeichen (delims) würdest du jetzt nehmen?
Wäre da <> nicht ein guter Ansatz?
Die Stelle (Token) - wo der Wert gefunden wird - kannst du ja selber anhand des Beispiels und deiner kompletten html Datei herausfinden.
Gruß
schade - dass du dir meine wenigen Zeilen nicht durchgelesen oder die markierten probiert hast....
- Die erste Zeile würde beide Werte finden?
- die zweite welchen der beiden?
- und die dritte dann evtl. den anderen?
Oder andersherum ist vor Players ein x oder vor maxplayers ein *? eben
Und wenn diese Token und Delims für deine erste Frage 2 bzw * sind - welches Trennzeichen (delims) würdest du jetzt nehmen?
Wäre da <> nicht ein guter Ansatz?
Die Stelle (Token) - wo der Wert gefunden wird - kannst du ja selber anhand des Beispiels und deiner kompletten html Datei herausfinden.
Gruß
Hallo Driver78!
Sind die Zeilen
tatsächlich (inkl Zeilenschaltungen) so richtig dargestellt (BTW: ein typischer Fall, in dem zur Verwendung der ""-Formatierung zu raten ist)?
Falls ja wird das Ganze per Batch ziemlich mühsam: abgesehen von den (Batch-)Sonderzeichen "<" und ">" (die bei Anwendung der von TimoBeil vorgeschlagenen Vorgangsweise noch relativ gut in den Griff zu bekommen sind) und der Tatsache, dass relevante Informationen auf mehrere Zeilen verteilt sind, verursacht eine ungerade Anzahl von Anführungszeichen oder Apostrophen in einer einzelnen Zeile der Quelldatei (und Batch kann nur zeilenweise verarbeiten) größere Schwierigkeiten - es würde sich daher eher eine andere Sprache (zB VBS) anbieten (ich komm' nur leider gerade nicht dazu, etwas zu basteln) ...
Grüße
bastla
Sind die Zeilen
<td width="50%" align="left" nowrap class="secondTableColor"><font class="smallFont" ><strong>Spieleranzahl:</strong></font></td>
<td width="50%" align="left" nowrap class="secondTableColor"><font class="smallFont" >19,</font></td>
</strong> 1<br><strong>pid:</strong> 287421623,<br><strong>skill:</strong> 1<br>')">
Falls ja wird das Ganze per Batch ziemlich mühsam: abgesehen von den (Batch-)Sonderzeichen "<" und ">" (die bei Anwendung der von TimoBeil vorgeschlagenen Vorgangsweise noch relativ gut in den Griff zu bekommen sind) und der Tatsache, dass relevante Informationen auf mehrere Zeilen verteilt sind, verursacht eine ungerade Anzahl von Anführungszeichen oder Apostrophen in einer einzelnen Zeile der Quelldatei (und Batch kann nur zeilenweise verarbeiten) größere Schwierigkeiten - es würde sich daher eher eine andere Sprache (zB VBS) anbieten (ich komm' nur leider gerade nicht dazu, etwas zu basteln) ...
Grüße
bastla
Hallo Driver78!
Mit den dargestellten Daten sollte sich das dann doch noch per Batch realisieren lassen:
Grüße
bastla
Mit den dargestellten Daten sollte sich das dann doch noch per Batch realisieren lassen:
@echo off & setlocal
set "Check=C:\temp\wget\check.txt"
set "PID=287421623"
set "ZNr="
for /f "delims=:" %%i in ('findstr /n "Spieleranzahl:" "%Check%"') do set "ZNr=%%i"
if not defined ZNr echo Spieleranzahl nicht gefunden & goto :eof
set /a ZNr+=1
for /f "tokens=4 delims=<>" %%i in ('findstr /n "^" "%Check%"^|findstr /b "%ZNr%:"') do set "players=%%i"
findstr "%PID%" "%Check%">nul && (
if %players% gtr 20 (
goto :beendeprozess
) else (
goto :checkeweiter
)
) || (
if %players% gtr 20 (
goto :checkeweiter
) else (
goto :starteprozess
)
)
bastla