alexbart
Goto Top

Zeichenkette Suchen und als Dateinamen verwenden, Ordner umbenennen und entpacken )

Es sollten Textteile aus multiplen LOG_*.txt und Config_*.txt ausgelesen werden, die dann in der generierten Datei im Dateinamen und im Header auftauchen sollen - dannach werden die Files noch auf Zeilen inhalte gescant und mit angabe der Zeilennummer und Ursprung, also dateiname in der neuen Datei ausgegeben

So in etwa sieht die gegebene config_762391231274=.txt aus


[{STEAM}\steamapps\{STEAMACCOUNT}\counter-strike\cstrike\config.cfg]
brightness "1"
cl_himodels "0"
cl_idealpitchscale "0.8"
fastsprites "0"
fps_max "1000"
fps_modem "0"
gamma "3"
gl_fog "1"
gl_monolights "0"
gl_overbright "0"
gl_polyoffset "4"
s_a3d "0.0"
s_doppler "0.0"
s_eax "0.0"

[/{STEAM}\steamapps\{STEAMACCOUNT}\counter-strike\cstrike\config.cfg]


Die LOG_8034612986323=.txt in etwa so

ESL Aequitas Anti-Cheat Logfile
Created: 22.06.2006 23:23:16
---
Log:

22.06.2006 22:13:08 - Received Player Info: Spieler Name (ID: 123456)
22.06.2006 22:14:24 - Started Monitoring - Matchlink: http://www.esl.eu/de/cs/3on3/ladder/match/6543221/
22.06.2006 22:14:27 - CS is already running - Path: e:\steam\steamapps\siegeszug2000@gmx.de\counter-strike\hl.exe
22.06.2006 22:18:57 - SteamID: 0:0:987423 (Note: this value might be not correct!)
22.06.2006 22:18:57 - Command Line Parameters found: +ip_clientport 27007 -noforcemaccel -noforcemparms -noforcemspd
22.06.2006 22:18:57 - Color Depth Settings: 16bpp
22.06.2006 23:13:51 - Screenshot -> O31iU19afFttaSlmPDNHSGpoV04xKUVcN2h4Q0c4fTE=.bmp (Timing: 187)
22.06.2006 23:22:35 - Configfile(s) has been changed -> CONFIG_OFJjJjVcTVpuZSxeP2FHeWdsIn1eXHlZMzt1SHllIl0=.txt
22.06.2006 23:22:36 - sent data to the ESL
22.06.2006 23:22:37 - WARNING: Application started during the Match - C:\Programme\ATI Technologies\ATI.ACE\cli.exe (pid: 5484) - MD5: 64c4c17bf6a40ff1cd21205e6fd415b8 - Size: 44kb
22.06.2006 23:22:56 - monitoring has been stopped properly
22.06.2006 23:22:56 - This message is used for some optimations! Don't ask me questions about it! ovar=NjN8NTE5MjJ8MHwyNzQ0MDBmYjdlM2E5MTliMmIwN2MzYzlmNDBkNWYzZHwwfEVTTCBBZXF1aXRhcyAtIFN0ZWFtIFZlcnNpb24gKkJFVEEq
22.06.2006 23:23:16 - Bitmap has been converted: ZX1kU2RcfCg7Y1lkP15zfWVmIyFcKElUN2tGQ3M6fC4=.bmp > OE9iJDUsUSw6ZVhgcVxwTDg7JnxkV0dbNW93SHdoTmE=.jpg

---

Replaylisting:
2006-06-22-3on3-schlaeger1.dem - 37169,05kb - MD5 Checksum: a22bfc7f62a3974724f242b04d8995f9
2006-06-22-3on3-schlaeger2.dem - 33478,56kb - MD5 Checksum: 7dffbe9e5e7b9d0b2e25b250edae3b78


Den Teil der neuen Batch datei die alles generieren soll habe ich so weit - drin enthalten sind nochmal erklärungen und anweiseung, da ich net weiss wie man bei batch kommentiert hab ichs mit gemacht face-wink

Evtl könnt ihr mir Tipps geben oder das mal vervollständigen. - am Wichtigsten ist das mit dem Dateinamen für die txt datei, entpacken und das mit den Ordnern is net so wichtig

lesen die entsprechenden daten aus

for /f "tokens=2,4 delims=- " %a in ('findstr "SteamID" log*.txt') do (set steamid=%b)
for /f "tokens=2,6,7,8 delims=- " %a in ('findstr "Info" log*.txt') do (set nameusteamid=%b %c %d)
for /f "tokens=2,6 delims=- " %a in ('findstr "Info" log*.txt') do (set name=%b)
for /f "tokens=2,6 delims=- " %a in ('findstr "Matchlink" log*.txt') do (set match=%b) gibt alles mit hhtp:blabl/match/$ID$/ aus, besser wär aber nur die $ID$


suchen in den daten nach den auffälligen sachen und schreiben sie in die entsprechenden dateien nieder

findstr /I /N "Player Matchlink SteamID Depth" log*.txt >> %match%-%name%.txt
wenn das wie oben nicht geht mit match ID, dann nur name
findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" con*.txt >> %match%-%name%.txt


dazu wär net schlecht wenn die batch alle *.zip files im gleichen verzeichnis entpackt, und zwar in einen order mit dem gleichen namen wie das zip archive, den ordner benennt es nachher um - gleiche name wie die textdatei die erzeugt wird
dann könnte die datei halt auf alle files in den jeweiligen ordnern angewendet werden
die entstehenden txt dateien am besten wieder ins obere verzeichnis
so das zu jedem ordner/zip archiv - dann eine text datei vorhanden ist face-wink

Content-Key: 34709

Url: https://administrator.de/contentid/34709

Ausgedruckt am: 29.03.2024 um 10:03 Uhr

Mitglied: Biber
Biber 23.06.2006 um 12:41:04 Uhr
Goto Top
Moin AlexBart,
ein kleiner Optimierungsvorschlag vorab:
>for /f "tokens=2,6 delims=- " %a in ('findstr "Matchlink" cslog*.txt') do @echo set match=%b  
set match=http://www.esl.eu/de/cs/3on3/ladder/match/6543221/
>for /f "tokens=2,13 delims=-/ " %a in ('findstr "Matchlink" cslog*.txt') do @echo set match=%b  
set match=6543221

...aber bevor wir weitermachen, müssen wir erstmal den Prozess geraderücken.
So, wie Dein Ablauf jetzt ist, durchpflügst Du mit den "FOR /F ...FindStr...." -Zeilen jedes Mal alle Log*.-Dateien.
Es werden da keine, eine oder viele Trefferzeilen gefunden mit Deinen Suchkriterien.
Von denen landet aber nur die letzte gefundene Zeile in der jeweiligen Variablen. Alle 136 vorher gefundenen Trefferzeilen gehen Dir verloren.
Du musst also je gefundener Zeile die Variable setzen und auch gleich verarbeiten, sonst wird das nix.

Also [Beispiel im Batch]
....
for /f "tokens=2,13 delims=-/ " %%a in ('findstr "Matchlink" log*.txt') do call :ProcessMatch %%a %%b   

:ProcessMatch Para1=Zeit Para2=$ID$
Echo %1 %2 blabla >>c:\analyze\MyExtract.txt
:: sonstige Dinge, die Du mit %zeit% und %$ID$% tun willst...
goto :eof

Anmerkung:
- Im Batch bei Zählvariablen immer "%%" statt "%" vor dem Var-Namen.
- Kommentare im Batch eigentlich nur für gesamte Zeile, d.h. Zeile beginnt mit
REM kommentar oder
:: anderer kommentar
- ODER (not recommended) Kommentar am Zeilenende
(echo Hier ein Batchbefehl und danach ein Kommentar) && Rem Zeilenendekommentar

Gruß
Biber
Mitglied: AlexBart
AlexBart 27.06.2006 um 20:47:03 Uhr
Goto Top
Hoi nochmal, danke Biber für die Hilfe und auch die Erinnerung, also ich hab jetzt:

::@> echo OFF

dir /b log*.txt > dateiliste.txt
dir /b con*.txt > cateiliste.txt

for /F %%i in (dateiliste.txt) do call :loop %%i

del dateiliste.txt


:loop

set dname=%1

for /f "tokens=2,8 delims=- " %%a in ('findstr "Configfile" %dname%^=.txt') do set cname=%%b
for /f "tokens=2,8 delims=-> " %%a in ('findstr "Configlisting" %dname%^=.txt') do set cname2=%%b
for /f "tokens=2,4 delims=- " %%a in ('findstr "SteamID" %dname%^=.txt') do set steamid=%%b
for /f "tokens=2,6,7,8,9,10,11,12,13 delims=- " %%a in ('findstr "Info" %dname%^=.txt') do set nameuuserid=%%b %%c %%d %%e %%f %%g %%h %%i
for /f "tokens=2,6 delims=- " %%a in ('findstr "Info" %dname%^=.txt') do set gname=%%b
for /f "tokens=2,13 delims=-/ " %%a in ('findstr "Matchlink" %dname%^=.txt') do set match=%%b
for /f "tokens=2,6 delims=- " %%a in ('findstr "Matchlink" %dname%^=.txt') do set matchlink=%%b


::Ausgaben in der neuerstellten Textdatei


echo Spielername: %gname% >> "%match%%gname%.txt"
echo Steamid: %steamid% >> "%match%%gname%.txt"
echo Name ^& ID: %nameuuserid% >> "%match%%gname%.txt"
echo MatchID: %match% >> "%match%%gname%.txt"
echo Matchlink: %matchlink% >> "%match%%gname%.txt"


echo %dname%^=.txt >> "%match%%gname%.txt"

findstr /I /N "Player Matchlink SteamID Depth" %dname%^=.txt >> "%match%%gname%.txt"
::suchen in den daten nach den auffälligen sachen und schreiben sie in die entsprechenden dateien nieder
::hier ist dann auch erstmal das problem, if datei existiert wähle entweder find1 oder find2 - und wie macht man es das er nach find1 nicht bei find 2 weitermacht? - :eof?
if exist %cname% do call find1:
if exist %cname2% do call :find2
find1:
echo final Configfile: >> "%match%%gname%.txt"

echo %cname% >> "%match%%gname%.txt"

findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" %cname% >> "%match%%gname%.txt"

find2:
echo temporary Config: >> "%match%%gname%.txt"

echo %cname% >> "%match%%gname%.txt"

findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" %cname2% >> "%match%%gname%.txt"



am Anfang hatte ich die ausgabe ohne Leerzeichen inzwischen obwohl ich mir nicht bewusst bin was ich geändert haben soll sind leerzeichen enthalten
Mitglied: Biber
Biber 27.06.2006 um 21:06:22 Uhr
Goto Top
Moin Alexbart,

na, das nimmt ja doch langsam Formen an.. face-wink

Also:
::hier ist dann auch erstmal das problem, if datei existiert wähle entweder find1 oder
find2 - und wie macht man es das er nach find1 nicht bei find 2 weitermacht? - :eof?

Würde ich (auch wegen der Les- und Wartbarkeit) so machen:
if exist %cname% goto find1
if exist %cname2% goto find2
:find1
echo ....
..
REM Ende des Blocks "find1"  
goto :ansEnde

:find2
....(bla)...

REM Ende des Blocks Find2

:ansEnde
REM hier allgemeine Aufräumarbeiten, falls nötig..
...(bla)...
::----endOf CheatHunter.bat

Noch ein paar Tipps bzw. Fussangeln (die leicht untergehen sonst):

- Achte auf die Sprungmarken. Im Batch ist die Schreibweise
:LabelX
Dahin springen mit
goto LabelX

Den LabelX-Block rufen und zurückkehren mit
call :LabelX
> dann muss aber der Block :LabelX eine Abschlusszeile haben:
goto :eof


~~~~~~~~~
So etwas ist fehlerträchtig:
echo final Configfile: >> "%match%%gname%.txt"

Besser einheitlich so:
Set Thisfile="%match%%gname%.txt"
echo final Configfile:>>%ThisFile%
> und keine "ästhetischen" Leerzeichen vor oder nach oder zwischen den ">" lassen!
> Es sei denn, die Leerzeichen sollen auch wirklich mit in die Zieldatei.

Gruß
Biber
Mitglied: AlexBart
AlexBart 28.06.2006 um 20:52:37 Uhr
Goto Top
So zwischendurch hats mal gegeht aber nu geht nix mehr, ich glaub falsch ist sie find1 if abfrage, also wenn die cname datei nicht existiert soll er find2 machen - ansonsten lief zwischendurch alles mal halbwegs

gesondert hab ich auch mal das zip entpacken und so gemacht und wollte die nun zusammen fügen, aber das is ja nun mal noch nix geworden...

Need Help

::@Echo OFF

dir /b log*.txt > dateiliste.txt
dir /b con*.txt > cateiliste.txt

for /F %%i in (dateiliste.txt) do call :loop %%i


del dateiliste.txt
del cateiliste.txt

:eof


:loop

set dname=%1

for /f "tokens=2,8 delims= " %%a in ('findstr "Configfile" %dname%^=.txt') do set cname1=%%b
for /f "tokens=2,8 delims=> " %%a in ('findstr "Configlisting" %dname%^=.txt') do set cname2=%%b
for /f "tokens=2,4 delims=- " %%a in ('findstr "SteamID" %dname%^=.txt') do set steamid=%%b
for /f "tokens=2,6,7,8,9,10,11,12,13 delims=- " %%a in ('findstr "Info" %dname%^=.txt') do set nameuuserid=%%b %%c %%d %%e %%f %%g %%h %%i
for /f "tokens=2,6 delims=- " %%a in ('findstr "Info" %dname%^=.txt') do set gname=%%b
for /f "tokens=2,13 delims=-/ " %%a in ('findstr "Matchlink" %dname%^=.txt') do set match=%%b
for /f "tokens=2,6 delims=- " %%a in ('findstr "Matchlink" %dname%^=.txt') do set matchlink=%%b

set ausgabe="%match%-%gname%.txt"
::Ausgaben in der neuerstellten Textdatei

echo Spielername: %gname%>>%ausgabe%
echo Steamid: %steamid%>>%ausgabe%
echo Name ^& ID: %nameuuserid%>>%ausgabe%
echo MatchID: %match%>>%ausgabe%
echo Matchlink: %matchlink%>>%ausgabe%
echo .>>%ausgabe%
echo

findstr /I /N "Player Matchlink SteamID Depth" %dname%^=.txt>>%ausgabe%

if not exist %cname1% do call :find2
:eof

:find1
echo final Configfile:>>%ausgabe%

findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" %cname1%>>%ausgabe%

:eof


:find2
echo temporary Config:>>%ausgabe%

findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" %cname2%>>%ausgabe%

:eof
Mitglied: Biber
Biber 28.06.2006 um 21:28:21 Uhr
Goto Top
Moin AlexBart,

im unteren Drittel lässt die Konzentration nach... face-wink

if not exist %cname1% do call :find2
if not exist %cname1% goto find2
:: er soll doch entweder/oder ausführen --oder doch ggf. beides?? Wäre doch Unsinn.
:eof Sprungmarke ":eof" ist eine INTERNE. Niemals definieren!!

:find1
echo final Configfile:>>%ausgabe%

findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" %cname1%>>%ausgabe%

:eof Gemeint ist hier: Sprung zum Ende des Batches, also:
goto :eof

:find2
echo temporary Config:>>%ausgabe%

findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" %cname2%>>%ausgabe%

:eof Wenn find2 ein geCALLter Block wäre, dann
:: wäre "goto :eof" hier die Anweisung: Gehe zurück in die Zeile nach dem CALL-Statement


Mehrfach eine gleichnamige Sprungmarke definieren (":eof") würde mich vielleicht nicht überfordern, aber einen CMD-Interpreter aus dem Hause M$ allemal.

Gruß
Biber
Mitglied: AlexBart
AlexBart 29.06.2006 um 01:47:48 Uhr
Goto Top
irgendwie kommt es langsam, aber das mit der if abfrage will irgendwie immer noch net so ganz - du hast ganz recht, entweder steht das eine wort in der log_*.txt datei oder aber das andere je nachdem sollen die text dateien dann zusammen gesetzt werden, in den logs in denen cnametemp - vorkommt und gefunden wird scheint es gut zu funktionieren - allerdings geht es immernoch nicht bei allen
nochmal zur erklärung es gehören immer eine log und eine config file zusammen - in der log soll er die passende config file finden und sie nach den werten durchsuchen und mit zeilennummer ausgeben
problem ist auch das die dateinamen halt md5 check sums sind und daher die seltsamsten namen aufweisen können.


Proggi
::@Echo OFF

dir /b log*.txt > dateiliste.txt
dir /b con*.txt > cateiliste.txt

for /F %%i in (dateiliste.txt) do call :loop %%i


del dateiliste.txt
del cateiliste.txt

::goto :eof


:loop

set dname=%1

for /f "tokens=2,8 delims= " %%a in ('findstr "Configfile" %dname%^=.txt') do set cnamefinal=%%b
for /f "tokens=2,10 delims=> " %%a in ('findstr "Configlisting" %dname%^=.txt') do set cnametemp=%%b
for /f "tokens=2,4 delims=- " %%a in ('findstr "SteamID" %dname%^=.txt') do set steamid=%%b
for /f "tokens=2,6,7,8,9,10,11,12,13 delims=- " %%a in ('findstr "Info" %dname%^=.txt') do set nameuuserid=%%b %%c %%d %%e %%f %%g %%h %%i
for /f "tokens=2,6 delims=- " %%a in ('findstr "Info" %dname%^=.txt') do set gname=%%b
for /f "tokens=2,13 delims=-/ " %%a in ('findstr "Matchlink" %dname%^=.txt') do set match=%%b
for /f "tokens=2,6 delims=- " %%a in ('findstr "Matchlink" %dname%^=.txt') do set matchlink=%%b

set ausgabe="%match%-%gname%.txt"
::Ausgaben in der neuerstellten Textdatei

echo ^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^= >>%ausgabe%
echo .>>%ausgabe%
echo Spielername: %gname%>>%ausgabe%
echo Steamid: %steamid%>>%ausgabe%
echo Name ^& ID: %nameuuserid%>>%ausgabe%
echo MatchID: %match%>>%ausgabe%
echo Matchlink: %matchlink%>>%ausgabe%
echo .>>%ausgabe%
echo ^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^= >>%ausgabe%
::suchen in den daten nach den auffaelligen sachen und schreiben sie in die entsprechenden dateien nieder
echo .>>%ausgabe%
echo %dname%^=.txt>>%ausgabe%
echo .>>%ausgabe%


findstr /I /N "Player Matchlink SteamID Depth" %dname%^=.txt>>%ausgabe%

echo .>>%ausgabe%
echo ^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^= >>%ausgabe%
echo .>>%ausgabe%


if exist %cnamefinal% goto findfinal
if exist %cname1% goto findtemp


:findtemp
echo temporary Config:>>%ausgabe%
echo .>>%ausgabe%
echo %cnametemp%>>%ausgabe%
echo .>>%ausgabe%
echo %cnametemp%
echo cnametemp
findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" %cnametemp%>>%ausgabe%
echo .>>%ausgabe%
echo ^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^= >>%ausgabe%
echo .>>%ausgabe%
goto :eof


:find2


echo final Configfile:>>%ausgabe%
echo .>>%ausgabe%
echo %cnamefinal%>>%ausgabe%
echo .>>%ausgabe%
echo %cnamefinal%
echo cnamefinal
findstr /I /N "cl_movespeedkey cl_pitchspeed cl_showevents cl_pmanstats cl_lc cl_lw gl_max_size gl_monolights gl_picmip gl_polyoffset s_show s_a3d developer fastsprites lightgamma texgamma" %cnamefinal%>>%ausgabe%


echo .>>%ausgabe%
echo ^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^=^= >>%ausgabe%
echo .>>%ausgabe%
goto :eof

:eof


Und zu guter letzt nochn Link mit der Batch und n paar files zum testen
h77p://ultrashare.net/hosting/fl/860b2dc79b/