Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

Wie finde ich folgende Werte?

Frage Entwicklung Batch & Shell

Mitglied: Driver78

Driver78 (Level 1) - Jetzt verbinden

14.12.2010, aktualisiert 20:55 Uhr, 3689 Aufrufe, 11 Kommentare

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:

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!
Mitglied: bastla
14.12.2010 um 21:16 Uhr
Hallo Driver78 und willkommen im Forum!

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"
Sollte es allerdings mehrere Zeilen der Art
*players:* ##
geben, würdest Du in der Variablen %players% den Wert aus der letzten gefundenen Zeile erhalten.

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
Die Verknüpfung mit "&&" entspricht dabei einer Abfrage des Errorlevels auf 0 ...

Grüße
bastla
Bitte warten ..
Mitglied: 60730
14.12.2010 um 21:17 Uhr
moin,

  • 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


  • 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 /?

Gruß
Bitte warten ..
Mitglied: Driver78
14.12.2010 um 22:17 Uhr
Erstmal vielen Dank für eure Bemühungen.

find /c /i "276696252" "C:\temp\wget\check.txt">nul && if %players% gtr 20 goto :Wait

Bedeutet doch, das er in der check.txt den Wert "276696252" sucht und wenn der wert über 20 ist soll er auf :Wait gehen.
Jedoch fehlt mir dann aber noch die Alternative, wenn nicht gehe zu einem anderen Punkt!
Bitte warten ..
Mitglied: bastla
14.12.2010 um 22:28 Uhr
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:
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)
Wie vermutlich zu erraten, steht "||" für "ausführen, wenn vorhergehender Befehl nicht mit Errorlevel 0 beendet wurde".

Besser lesbar ginge das Ganze auch so:
01.
find /c /i "276696252" "C:\temp\wget\check.txt">nul && ( 
02.
    if %players% gtr 20 ( 
03.
        goto :Wait 
04.
    ) else ( 
05.
        goto :AndererPunkt 
06.
07.
) || ( 
08.
    echo PID nicht gefunden! 
09.
    goto :eof 
10.
)
Grüße
bastla
Bitte warten ..
Mitglied: Driver78
15.12.2010 um 01:14 Uhr
Ich muss mich Entschuldigen, einmal dafür das ich einwenig zu forsch war, weil ich zu Unüberlegt gepostet habe.
Und zweitens, weil ich euch damit nur unnötig Verwirrt habe. Doch ehrlich gesagt, in meinem Kopf Kreisen zur Zeit tausend Befehle Gedanken und Dinge. Und ich beneide jeden einzelnen, der bei den ganzen Codes, Parameter und Befehlen, noch den Überblick behält!
Doch nun weiter........

In meiner checkt.txt werden die Werte anders Angezeigt wie zu Eingangs gepostet. Es lag daran das ich einen anderen Viewer benutzt habe und es mir nicht aufgefallen ist.
Hier einmal für diejenigen die mehr wie ein Auge zu Drücken können! ^^

<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>')">

Dieses ist jetzt nur ein kleiner Teil des gesammten Datei, jedoch genügt dieses um diesmal Richtig aufzuzeigen was ich denn überhaupt möchte.

Vorweg, ich habe in der entsprechenden PHP den Eintrag Players: umbenannt in Spieleranzahl:, damit es da keine Verwechslung seitens der Suche gibt wegen MaxPlayers:.

Jedoch geht es darum das ich es nicht schaffe, die Spieleranzahl heraus zu finden. Weil diese hinter den ganzen anderen Werten irgendwie nicht zu finden ist. Wenigstens für mich............! Ich möchte hingehen können und mit der Batch folgendes realiesieren:

Wenn die Spieleranzahl größer ist wie 20 und die PID vorhanden gehe zu :beendeprozess
Wenn die Spieleranzahl größer ist wie 20 und die PID nicht vorhanden gehe zu :checkeweiter
Wenn die Spieleranzahl unter 20 ist, aber die PID vorhanden gehe zu :checkeweiter
Wenn die Spieleranzahl unter 20 ist, aber die PID nicht vorhanden mache :starteprozess

Ich hoffe ich konnte wenigstens jetzt einwenig Klarheit schaffen. Und hoffe immer noch darauf das mein Vorhaben funktioniert.

Und damit ich irgendwann selber mal verstehe was die einzelnen Werte, Befehle usw. Bedeuten, wäre ein Buch Ratschlag am Rande wohl nicht verkehrt. Wie gesagt, dieses ist das erste mal das ich ein solche Batch in dem Umfang benutze. Und mir fällt es Sichtlich schwer, vor allem da ich nicht wirklich Beruflich damit zu tun habe, und zweifelsohne ein Laie bin.

In dem Sinn,
vielen vielen Dank für Ihre Unterstützung, die wahrlich nicht Selbstverständlich ist.
Bitte warten ..
Mitglied: 60730
15.12.2010 um 09:05 Uhr
Moin,

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ß
Bitte warten ..
Mitglied: bastla
15.12.2010 um 11:06 Uhr
Hallo Driver78!

Sind die Zeilen
01.
<td width="50%" align="left" nowrap class="secondTableColor"><font class="smallFont" ><strong>Spieleranzahl:</strong></font></td> 
02.
<td width="50%" align="left" nowrap class="secondTableColor"><font class="smallFont" >19,</font></td> 
03.
</strong> 1<br><strong>pid:</strong> 287421623,<br><strong>skill:</strong> 1<br>')">
tatsächlich (inkl Zeilenschaltungen) so richtig dargestellt (BTW: ein typischer Fall, in dem zur Verwendung der "Code"-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
Bitte warten ..
Mitglied: Driver78
15.12.2010 um 11:48 Uhr
Guten Tag,

Nun, zu dem Vorschlag von TimoBeil muss ich sagen, das dieses eine Nummer zu hoch für mich ist, selbst das Tutorial verwirrt mich zuzeit mehr als das es mir hilft, wenn gleich dieses auch die Perfekte Lösung wäre. Ich habe in den letzten zwei Stunden versucht mit den gennanten Befehlen zu Arbeiten, jedoch ohne Sichtbaren erfolgt.
Mein Problem ist, das ich es nicht so testen kann, das ich ein Ergebniss sehe und ich dann den "erlösenden" Aha Effekt erziele.

Von daher wäre vielleicht eine kleine Beispiel Lektion mit Sicherheit Lehrreicher!

Anbei mal der Code, diesmal auch in der "Code" Formatierung (die vorherigen Zeilen des Codes lasse ich mal Weg)

01.
                    <td width="50%" align="left" nowrap class="secondTableColor"><font class="smallFont" ><strong>maxplayers:</strong></font></td> 
02.
                    <td width="50%" align="left" nowrap class="secondTableColor"><font class="smallFont" >48</font></td> 
03.
                  </tr> 
04.
                  <tr class="borderAround"> 
05.
                    <td width="50%" align="left" nowrap class="secondTableColor"><font class="smallFont" ><strong>Spieleranzahl:</strong></font></td> 
06.
                    <td width="50%" align="left" nowrap class="secondTableColor"><font class="smallFont" >19</font></td>
Gruß
Bitte warten ..
Mitglied: bastla
15.12.2010 um 16:42 Uhr
Hallo Driver78!

Mit den dargestellten Daten sollte sich das dann doch noch per Batch realisieren lassen:
01.
@echo off & setlocal 
02.
set "Check=C:\temp\wget\check.txt" 
03.
set "PID=287421623" 
04.
 
05.
set "ZNr=" 
06.
for /f "delims=:" %%i in ('findstr /n "Spieleranzahl:" "%Check%"') do set "ZNr=%%i" 
07.
if not defined ZNr echo Spieleranzahl nicht gefunden & goto :eof 
08.
set /a ZNr+=1 
09.
for /f "tokens=4 delims=<>" %%i in ('findstr /n "^" "%Check%"^|findstr /b "%ZNr%:"') do set "players=%%i" 
10.
findstr "%PID%" "%Check%">nul && ( 
11.
    if %players% gtr 20 ( 
12.
        goto :beendeprozess 
13.
    ) else ( 
14.
        goto :checkeweiter 
15.
16.
) || ( 
17.
    if %players% gtr 20 ( 
18.
        goto :checkeweiter 
19.
    ) else ( 
20.
        goto :starteprozess 
21.
22.
)
Grüße
bastla
Bitte warten ..
Mitglied: Driver78
15.12.2010 um 19:29 Uhr
Vielen Vielen Dank bastla,

ich kann Dir nicht genug danken, es funktioniert! Zwar verstehe ich nur einen Bruchteil der Befehle die dort verarbeitet sind, doch ich werde mich bemühen dahinter zusteigen!

Gruß
Bitte warten ..
Mitglied: bastla
15.12.2010 um 23:17 Uhr
Hallo Drive78!

Freut mich, wenn's klappt ...

... und bei Fragen: fragen

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Hyper-V
gelöst HyperV - VMs weg finde nix mehr (14)

Frage von Nemonautilus zum Thema Hyper-V ...

Netzwerkmanagement
gelöst Icingaweb2 Werte für das NRPE CheckDisk anpassen (8)

Frage von M.Marz zum Thema Netzwerkmanagement ...

Batch & Shell
gelöst PS Werte CSV-Datei in AD Attribut (3)

Frage von lupolo zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...